/*
TASK:store
LANG:C
*/
#include <stdio.h>

  long time;
  long k[10001];
  int l[10001][1001];
  int N, M;

void bfs(int v);

int main() {
  int i, j;
  scanf("%d%d", &N, &M);
  for(i=0; i<N; i++) {
  	scanf("%d%d", &k[i], &l[i][0]);
    for(j=1; j<=l[i][0]; j++) {
    	scanf("%d", &l[i][j]); l[i][j]-=1;
    }
  }
  bfs(0);
  printf("%ld\n", time%1000000000);
	return 0;
}

void bfs(int v) {
  int i, j, w;
  for(i=l[v][0]; i>0; i-=1) {
  	w=l[v][i];
  	if(l[w][0]) {
      time+=1;
    	bfs(w);
      k[v]+=k[w];
      time+=2*(k[w]/M)+((k[w]%M)?(2):(0))-1;
      l[v][0]-=1;
    }
    else {
      k[v]+=k[w];
      time+=2*(k[w]/M)+((k[w]%M)?(2):(0));
      l[v][0]-=1;
    }
  }
	return;
}

