/*
TASK:store
LANG:C
*/
#include<stdio.h>
#define Maxn 10008
 struct R{
  int next,v;      
 }e[3*Maxn];

 struct otgrs{
  long br,tt;
 }f[Maxn];
 
 char used[Maxn];
 
 int beg[Maxn],n,m,k[Maxn];
 
 void dfs(int i)
 {
//  otgrs c,t;
  int j;
  long vr=0;
  f[i].br=k[i];
  for(j=beg[i];j!=0;j=e[j].next)
   {
    if(!used[e[j].v]){used[e[j].v]=1; dfs(e[j].v);
    vr+=f[e[j].v].tt;
    f[i].br+=f[e[j].v].br;
    }
   }
  if(f[i].br%m==0)f[i].tt=2*(f[i].br/m);  
   else f[i].tt=2*(f[i].br/m+1);
  f[i].tt+=vr;
  f[i].tt=f[i].tt%1000000000;
  //return c; 
 }
 
 int main()
 {
  int i,j,s,a,b=1;
//  otgrs t;
  scanf("%d",&n);
  scanf("%d",&m);  
  for(i=0;i<=n;i++){beg[i]=0; used[i]=0;}
  for(i=1;i<=n;i++)
  {
   scanf("%d",&k[i]);
   scanf("%d",&s);
   for(j=0;j<s;j++)               
   {
    scanf("%d",&a);
    e[b].next=beg[i];
    beg[i]=b;
    e[b].v=a;
    b++;                                                              
   }              
  }  
  for(i=beg[1],b=0;i!=0;i=e[i].next)
  {
   dfs(e[i].v);
   b+=f[e[i].v].tt;                             
  }   
  printf("%d\n",b);   
  //scanf("%d",&n);
  return 0;   //fdf
 }

