/*
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;

fscanf(in, "%d %d", &n, &m);
for (i=1; i<=n; i++)
    {
    fscanf(in, "%d", &k[i]);
    fscanf(in, "%d", &len[i]);
    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();
for (i=0; i<len[1]; i++) c = recurse(a[1][i]);
fprintf(out, "%d\n", ans);

//system("pause");

return 0;
}
