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