/*
TASK: STORE
LANG: C++
*/

#include <cstdio>
#include <vector>
using namespace std;

const int MAX_N = 10000+5;
const int MOD   = 1000000000;

int n, M;
int K[MAX_N];
vector<int> A[MAX_N];

void input ()
{
     int i, j, a, b;
     
     scanf ("%d%d", &n, &M);
     
     for (i=1; i<=n; i++) {
         scanf ("%d", &K[i]);
         scanf ("%d", &a);
         
         for (j=0; j<a; j++) {
             scanf ("%d", &b);
             A[i].push_back (b);
         }
     }
}

int solve (int p)
{
     int i, ans=0;
     
     for (i=0; i<A[p].size(); i++) {
         ans = ( ans + solve (A[p][i]) ) % MOD;
         K[p] += K[ A[p][i] ];
     }
         
     if (p!=1) ans += ( K[p]/M ) + ( K[p]%M!=0 );
     //printf ("%d: %d %d\n", p, ans, K[p]);

     return ans % MOD;
}

int main ()
{
    //freopen ("store.in", "r", stdin);
    
    input ();
    printf ("%d\n", (2*solve(1)) % MOD);
    
    return 0;    
}
