#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
using namespace std;
#define ll long long
#define mod 998244353
ll n,k;
ll a[110][1010];
ll l[110];
ll ans[110];
ll maxx=-1;
ll gcd(ll x,ll y)
{
if(y==0)
{
return x;
}
return gcd(y,x%y);
}
ll lcm(ll x,ll y)
{
return (x*y)/gcd(x,y);
}
int main()
{
scanf("%lld%lld",&n,&k);
for(ll i=1;i<=n;i++)
{
scanf("%lld",&l[i]);
for(int j=1;j<=l[i];j++)
{
scanf("%lld",&a[i][j]);
}
if(i==1)
continue;
ll bei=lcm(l[i],l[i-1]);
if(k>bei)
{
ll ii=1,jj=1;
ll bb=0;
for(int j=1;j<=bei;j++)
{
if(ii>l[i-1])
ii=1;
if(jj>l[i])
{
jj=1;
}
bb+=(a[i-1][ii]%mod*a[i][jj]%mod)%mod;
ii++;jj++;
}
ll cnt=k/bei;
if(k%bei==0)
{
ans[i]=(bb%mod*cnt%mod)%mod;
if(ans[i]>maxx)
maxx=ans[i];
}
}
else{
ll ii=1,tot=0,jj=1;
while(1)
{
tot++;
if(tot>k)
break;
if(ii>l[i-1])
{
ii=1;
}
if(jj>l[i])
{
jj=1;
}
ans[i]+=(a[i-1][ii]%mod*a[i][jj]%mod)%mod;
ii++;jj++;
}
ans[i]%=mod;
if(ans[i]>maxx)
{
maxx=ans[i];
}
}
}
printf("%lld",maxx);
return 0;
}