#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int sj=2000010;
int n,m,hh[sj],son[sj],a,p,h[sj],e,cf[sj],qz[sj];
struct fz
{
int z,ne;
}fa[sj*3];
inline int read()
{
int jg=0,temp=0;
temp=getchar()-‘0‘;
if(temp>=0&&temp<=9)
jg+=temp;
temp=getchar()-‘0‘;
while(temp!=-16&&temp!=-38)
{
if(temp>=0&&temp<=9)
{
jg*=10;
jg+=temp;
}
temp=getchar()-‘0‘;
}
return jg;
}
void add(int x,int y)
{
fa[e].z=y;
fa[e].ne=h[x];
h[x]=e++;
}
void init()
{
n=read();
m=read();
memset(h,-1,sizeof(h));
for(int i=0;i<n;i++) hh[i]=read();
for(int i=0;i<n;i++)
{
son[i]=read();
for(int j=1;j<=son[i];j++)
{
a=read();
add(i,a);
}
}
}
struct ZJ
{
int v,w;
};
int my_comp(const ZJ&a,const ZJ&b)
{
if(a.v<b.v)
return 1;
return 0;
}
void dfs(int x)
{
int ge=0;
ZJ zjd[300];
for(int i=h[x];i!=-1;i=fa[i].ne)
{
dfs(fa[i].z);
ge++;
zjd[ge].v=qz[fa[i].z];
zjd[ge].w=fa[i].z;
}
sort(zjd+1,zjd+ge+1,my_comp);
qz[x]=hh[x]+son[x];
for(int i=1;i<=ge;i++)
{
if(qz[x]+zjd[i].v-1<=m)
{
qz[x]+=zjd[i].v-1;
cf[x]++;
}
cf[x]+=cf[zjd[i].w];
}
}
int main()
{
freopen("sakura.in","r",stdin);
freopen("sakura.out","w",stdout);
init();
dfs(0);
printf("%d",cf[0]);
//while(1);
return 0;
}