#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long llint;
const int MAXN = 102;
const int MAXK = 1002;
const llint inf = 10000000000000000LL;
int n;
llint T;
int vrsta[MAXK];
int vrijeme[MAXK];
llint graf[MAXN][MAXN];
llint mat[60][MAXN][MAXN];
llint tmp[MAXN][MAXN];
llint used[MAXN][MAXN];
llint nova[MAXN][MAXN];
void mult( llint A[MAXN][MAXN], llint B[MAXN][MAXN] ) {
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
tmp[i][j] = inf;
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
for( int k = 0; k < n; ++k )
if( A[i][k] + B[k][j] < tmp[i][j] )
tmp[i][j] = A[i][k] + B[k][j];
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
A[i][j] = tmp[i][j];
}
int main( void ) {
scanf( "%d %lld", &n, &T );
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
graf[i][j] = inf;
for( int i = 0; i < n; ++i ) {
int k, y; scanf( "%d %d", &k, &y );
for( int j = 0; j < k; ++j ) scanf( "%d", &vrsta[j] );
for( int j = 0; j < k; ++j ) scanf( "%d", &vrijeme[j] );
for( int j = 0; j < k; ++j ) {
int x = vrsta[j]-1;
llint w = vrijeme[j]+y;
if( w < graf[i][x] ) graf[i][x] = w;
}
}
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
mat[0][i][j] = graf[i][j];
for( int k = 1; k < 55; ++k ) {
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
mat[k][i][j] = mat[k-1][i][j];
mult( mat[k], mat[k-1] );
}
for( int i = 0; i < n; ++i ) {
for( int j = 0; j < n; ++j )
used[i][j] = inf;
used[i][i] = 0;
}
llint ans = 0;
for( int t = 54; t >= 0; --t ) {
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
nova[i][j] = used[i][j];
mult( nova, mat[t] );
bool ok = false;
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
if( nova[i][j] <= T ) ok = true;
if( ok ) {
ans |= 1LL<<t;
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j )
used[i][j] = nova[i][j];
}
}
printf( "%lld\n", ans );
return 0;
}