/*
TASK: store
LANG: C
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10002

 struct edges 
  {
   int ver;
   struct edges *next;
  };

 struct edges mem[MAXN];
 int size;
 int n,m;
 int all[MAXN];
 struct edges *a[MAXN];
 int res;
 int mod;
 
 int put (int i,int j)
  {
   (mem+(++size))->next=a[i];
   a[i]=(mem+size);
   a[i]->ver=j;
  }
 
 void dfs (int i)
  {
   struct edges *j;
   for (j=a[i];j;j=j->next)
    {
     dfs(j->ver);
     res=(res+2*((all[j->ver]+m-1)/m))%mod;
     all[i]+=all[j->ver];
    }
  }

 int main ()
  {
   int i,j;
   scanf("%d%d",&n,&m);
   for (i=1;i<=n;i++)
    {
     scanf("%d",&all[i]);
     for (scanf("%d",&j);j>0;j--)
      put(i,j);
    }
    exit (0);
   mod=1000000000;
   dfs(1);
   printf("%d\n",res); 
   return 0;
  }
