/*
TASK:store
LANG:C++
*/
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

long n,m;
vector<long> k,emp;
vector<vector<long> > adj;
vector<long> p,a;

void rec(long v)
{
     long i;
     for (i=0; i<adj[v].size(); i++)
      { rec(adj[v][i]); k[v]+=k[adj[v][i]]; }
     i=k[v]/m; if (m*i!=k[v]) i++;
     a[v]=i*2;
     if (a[v]>=1000000000) a[v]%=1000000000;
     return;
}

int main()
{
    long i,j,l,t;
    cin>>n>>m;
    p.resize(n+2);
    k.resize(n+2);
    adj.resize(n+2);
    for (i=1; i<=n; i++)
     {
               cin>>k[i];
               cin>>l;
               for (j=0; j<l; j++)
                {  cin>>t; 
                   adj[i].push_back(t);
                   p[t]=i;
                         }
              }
           a.resize(n+2);   
    rec(1);
    long ans=0;
    for (i=2; i<=n; i++)
     { ans+=a[i]; if (ans>=1000000000) ans%=1000000000; }
       
    cout<<ans<<"\n";
    
    return 0;
}
