#include<bits/stdc++.h>
using namespace std;
const int maxn=3005;
const int p=-0x7f7f7f;
int n,m;
struct node{
int num,cost;
};
vector<node > g[maxn];
int v[maxn],dp[maxn][maxn];
int dfs(int nu,int fa){
if(g[nu].size()==0) return 1;
int cnt=0;
for(int i=0;i<g[nu].size();i++){
cnt+=dfs(g[nu][i].num,nu);
}
for(int i=0;i<g[nu].size();i++){
for(int vv=cnt;vv>0;vv--){
for(int j=0;j<=cnt;j++){
if(vv-j>=0) dp[nu][vv]=max(dp[nu][vv],dp[nu][vv-j]+dp[g[nu][i].num][j]-g[nu][i].cost);
}
}
}
return cnt;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n-m;i++){
int k;
cin>>k;
for(int i=1;i<=k;i++){
int x,y;
cin>>x>>y;
g[i].push_back((node){x,y});
}
}
memset(dp,-0x7f,sizeof(dp));
for(int i=n-m+1;i<=n;i++) cin>>v[i];
for(int i=1;i<=n;i++) dp[i][0]=0;
for(int i=n-m+1;i<=n;i++) dp[i][1]=v[i];
dfs(1,-1);
int ans=-1;
for(int i=m;i>=1;i--) if(dp[1][i]>=0){
ans=i;
break;
}
cout<<ans<<endl;
return 0;
}