#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
****************************************************************/