#include<bits/stdc++.h>
#define int long long
using namespace std;
int p[30005];
int a[15][3005];
int dp[2][3005][3005];
int ans;
void solve()
{
int n,k;
cin>>n>>k;
ll sum=0;
for(int i=1;i<=n;i++)
{
cin>>p[i];
sum+=p[i];
for(int j=1;j<=p[i];j++)
{
cin>>a[j][i];
}
}
if(sum<k)
{
ans=0;
for(int i=1;i<=n;i++)
{
ans+=a[p[i]][i];
}
cout<<ans<<'\n';
return;
}
for(int i=0;i<2;i++)
{
for(int j=0;j<=n;j++)
{
for(int l=0;l<=n;l++)
{
dp[i][j][l]=-1;
}
}
}
dp[0][0][0]=0;
dp[1][n+1][0]=0;
for(int i=n;i>=1;i--)
{
for(int j=0;j<=k;j++)
{
dp[1][i][j]=dp[1][i+1][j];
if(j>=p[i]&&dp[1][i+1][j-p[i]]!=-1)
{
dp[1][i][j]=max(dp[1][i][j],dp[1][i+1][j-p[i]]+a[p[i]][i]);
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<=k;j++)
{
dp[0][i][j]=dp[0][i-1][j];
if(j>=p[i]&&dp[0][i-1][j-p[i]]!=-1)
{
dp[0][i][j]=max(dp[0][i][j],dp[0][i-1][j-p[i]]+a[p[i]][i]);
}
}
}
ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=p[i];j++)
{
ll tmp=k-j;
for(int l=0;l<=tmp;l++)
{
int tem=tmp-l;
if(dp[0][i-1][l]!=-1&&dp[1][i+1][tem]!=-1)
{
ans=max(ans,dp[0][i-1][l]+dp[1][i+1][tem]+a[j][i]);
}
}
}
}
cout<<ans<<'\n';
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--)
solve();
}