#include<bits/stdc++.h>
using namespace std;
int N,V,S[106],dp[106][10006];
struct Node{
vector<int> v,w;
}a[106];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
//1906 1889
cin>>N>>V;
for(int i=1;i<=N;i++){
cin>>S[i];
for(int j=1,v,w;j<=S[i];j++){
cin>>v>>w;
a[i].v.push_back(v);a[i].w.push_back(w);
}
}
for(int i=1;i<=N;i++){
for(int j=0;j<=S[i]-1;j++){
for(int k=1;k<=V;k++){
//cout<<max(dp[i-1][k],dp[i][k])<<" "<<i<<" "<<k<<"\n";
if(k>=a[i].v[j])
dp[i][k]=max(max(dp[i-1][k],dp[i-1][k-a[i].v[j]]+a[i].w[j]),dp[i][k]);
else
dp[i][k]=max(dp[i-1][k],dp[i][k]);
}
//cout<<endl;
}
}
cout<<dp[N][V];
return 0;
}
/**************************************************************
Problem: 1906
User: chenxurui
Language: C++
Result: Accepted
Time:95 ms
Memory:6512 kb
****************************************************************/