int n,m;
vector<pii>e[M];
int c[M];
int f[3005][3005];
void init(){
rep(i,0,3000)
rep(j,0,3000)
f[i][j]=-inf;
}
int dfs(int u){
if(u>n-m){
f[u][1]=c[u];
return 1;
}
int siz=0,g;
for(auto[v,w]:e[u]){
g=dfs(v);
siz+=g;
for(int j=siz;j>0;j--){
for(int k=1;k<=min(j,g);k++){
f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]-w);
}
}
}
return siz;
}
void solve(){
cin>>n>>m;
rep(i,1,n-m){
int k;cin>>k;
rep(j,1,k){
int v,w;cin>>v>>w;
e[i].pb({v,w});
}
}
init();
rep(i,1,n)f[i][0]=0;
rep(i,n-m+1,n){
cin>>c[i];
}
dfs(1);
for(int i=3000;i>=0;i--){
if(f[1][i]>=0){
cout<<i;return;
}
}
}