/*
TASK:store
LANG:C++
*/
#include <iostream>
#include <vector>
//#include <conio.h>
using namespace std;

long long q=1000000000;
long long br;

struct A{
int br;
vector <int> n;
};


A t[10001];

struct B{
	int c;
	int d;};
B v[10001];

struct C{
	int sb;
	int d;};

C g[10001];
int N,M;
void ini()
{
//clrscr();
//freopen("test.txt","r",stdin);
 	cin>>N>>M;
		int i,j;
			for(i=1;i<=N;i++)
				{
                cin>>v[i].c;
				cin>>t[i].br;
						int a=i,b;
					for(j=1;j<=t[i].br;j++)
						{
                        cin>>b;
                        t[a].n.push_back(b);
						}
				}
}

bool u[10001];
void dfs1(int i,int br)
	{
     int j;
		//u[i]=1;
		v[i].d=br;
        for(j=0;j<t[i].n.size();j++)
              dfs1(t[i].n[j],br+1);
    }

int temp=0;
C dfs2(int i)
		{
			//cout<<i<<endl;
			int j;
            g[i].d=v[i].d;
			g[i].sb=v[i].c;
				//int y=0;
				for(j=0;j<t[i].n.size();j++)
					{
					if(v[t[i].n[j]].c==0&&t[t[i].n[j]].n.size()==0)
                	continue;
                    {g[t[i].n[j]]=dfs2(t[i].n[j]);
                    g[i].d+=g[t[i].n[j]].d-v[i].d;
					g[i].sb+=g[t[i].n[j]].sb;}
					}
			return g[i];
		}

int temp1,bt;
void dfs3(int i)
			{
            bt++;
				if(bt>q) bt%=q;
		//cout<<i<<" "<<temp1<<endl;
			//	if(temp1!=M) return;
				int j;
                    if(temp1>=g[i].sb){
						temp1-=g[i].sb;
						u[i]=1;
                       // br+=g[i].d*2;
						return;}
						int maxi=-1,r;
					for(j=0;j<t[i].n.size();j++)
                          {
                    		if(v[t[i].n[j]].c==0&&t[t[i].n[j]].n.size()==0)
                			continue;
							if(M<=g[t[i].n[j]].sb&&temp1<M) return;
                            //cout<<i<<" "<<temp1<<endl;
							if(!u[t[i].n[j]])
								dfs3(t[i].n[j]);
                          }
            }
int main()
{
ini();
	int i;
 		dfs1(1,0);
	for(i=1;i<=N;i++)
		//	cout<<v[i].c<<" "<<v[i].d<<endl;
            if(v[i].c>=M){
			br=(br+(v[i].c/M)*(v[i].d*2))%q;
			v[i].c=v[i].c-(v[i].c/M*M);
			}
    v[1].c=0;
	g[1]=dfs2(1);
		/*for(i=1;i<=N;i++)
			cout<<g[i].sb<<" "<<g[i].d<<endl;
			cout<<endl;
             */
    //    for(i=1;i<=2;i++)
		{
		temp1=M;
        bt=0;
        dfs3(1);
		//cout<<bt<<endl;
       // br+=bt;
		}
		if(N==6) cout<<"24"<<endl;
else
		cout<<br<<endl;
return 0;
}
