/*
TASK:store
LANG:C++
*/
#include <iostream>
#include <vector>
#define maxn 10000
#define mod 1000000000
#define FOR(i,n) for(int i=0;i<(int)n;i++)

std::vector< int > v[maxn];
int dp[maxn] = {0};
int sum[maxn] = {0};
int n,m;
int cost[maxn];
int res(0);

void init() 
{
     std::cin >> n >> m;
     FOR(i,n) {
         std::cin >> cost[i];
         int sz;
         std::cin >> sz;
         FOR(j,sz) {
             int cv;
             std::cin >> cv;
             v[i].push_back(cv-1);
         }
     }
}

void go(int vert) {
    int csum = cost[vert];
    FOR(i, v[vert].size()) {
           go(v[vert][i]);
//           dp[i] = (dp[i] + (2 * dp[ v[vert][i] ]) % mod) % mod;
           res = (res + (2 * dp[ v[vert][i] ]) % mod ) % mod;
           csum  = (sum[ v[vert][i] ] + csum) % mod;
    }
    sum[vert] = csum;
    dp[vert] = (sum[vert] / m) + ( (sum[vert] % m) == 0 ? 0 : 1 );
    dp[vert] = dp[vert] % mod;
}

int main() {
    init();
    go(0);
    //FOR(i,n) std::cout << dp[i] << " " << sum[i] << std::endl;
    std::cout << res << std::endl;
    //std::cin >> n;
    return 0;
}
