/*
TASK: store
LANG: C++
*/

#include <iostream>
#include <cstdio>
#include <fstream>
#include <cstdlib>
#define MAX 10042
#define MM 800

using namespace std;

FILE *in; FILE *out;

int n, m;
int a[MAX][MM];
int len[MAX];
int k[MAX];
int ans;



int recurse(int cur)
{
int i, c;
int ret;

ret = k[cur];

for (i=0; i<len[cur]; i++)
    {
    ret += recurse(a[cur][i]);
    }

if (ret % m == 0) ans += (ret/m)*2;
else ans += ((ret/m) + 1)*2;

ans %= 1000000000;

return ret;
}



void input(void)
{
int i, c, j;

fscanf(in, "%d %d", &n, &m);

for (i=1; i<=n; i++)
    {
    fscanf(in, "%d", &k[i]);
    fscanf(in, "%d", &len[i]);
    
    if (i == 1 && len[i] == n-1)
       {
       for (c=0; c<len[i]; c++) {fscanf(in, "%d", &j);}
       }
    else for (c=0; c<len[i]; c++) fscanf(in, "%d", &a[i][c]);
    }

return;
}


int main(void)
{
int i, c;

//in = fopen("store.in", "rt"); out = fopen("store.out", "wt");
in = stdin; out = stdout;

input();
if (len[1] == n-1)
   {
   ans = 0;
   for (c=2; c<=n; c++)
       {
       if (k[c] % m == 0) ans += 2*(k[c]/m);
       else ans += 2*(k[c]/m + 1);
       }
   }
else for (i=0; i<len[1]; i++) c = recurse(a[1][i]);
fprintf(out, "%d\n", ans);

//system("pause");

return 0;
}
