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

int vrs[MAXN], edg[MAXN], n_edg=0, pack[MAXN];
int M;
main()
{
    int i, y, N, alltime=0;
    scanf("%d %d", &N, &M);
    vrs[0]=0;
    for(i=1; i<=N; i++)
    {
        scanf("%d %d", &pack[i], &vrs[i]);
        for(y=0; y<vrs[i]; y++)
            scanf("%d", &edg[n_edg++]);
        vrs[i]+=vrs[i-1];
    }
    
    for(i=vrs[0]; i<vrs[1]; i++)
        alltime += time(edg[i]);
        
    printf("%d\n", alltime);
    return 0;
}

int time(int a)
{
    int i, ret=0, tmppack, allpack=pack[a];
    for(i=vrs[a-1]; i<vrs[a]; i++)
    {
        tmppack = pck(edg[i]);
        allpack += tmppack;
        ret += time(edg[i]);
    }
    return ret + ((int)ceil((double)allpack/M))*2;
}

int pck(int a)
{
    int i;
    int allpack = pack[a];
    for(i=vrs[a-1]; i<vrs[a]; i++)
        allpack += pck(edg[i]);
    return allpack;
}
