#include<bits/stdc++.h>
using namespace std;

/*
  01背包
  f[i,j] = max(f[i-1,j],f[i-1,j-v[i]]+w[i])
  分组背包:三重循环 
  f[i,j] = max(f[i-1,j],f[i-1,j-v[i,k]]+w[i,k]) 
*/

int f[110][110],v[110][110],w[110][110],s[110];
int main() {
	int n,m;
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
		cin>>s[i];
		for(int j = 0;j < s[i];j++){
			cin>>v[i][j]>>w[i][j];
		}
	}
	
	for(int i = 1;i <= n;i++){
		for(int j = 0;j <= m;j++){
			f[i][j] = f[i-1][j];//本组不选的情况 
			for(int k = 0;k < s[i];k++){
				if(v[i][k] <= j){
					f[i][j] = max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]);
				}
			}
		}
	}
	
	cout<<f[n][m];
	return 0;
}

/**************************************************************
	Problem: 1906
	User: admin
	Language: C++
	Result: Accepted
	Time:41 ms
	Memory:2216 kb
****************************************************************/