#include<iostream>
#include<cstring>
#define re register
#define INF 0x3f3f3f3f
#define int long long
#define zhuang_bi ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N = 1e4 - 1;
int cnt,n,m;
int head[N],v[N],dp[N][N];
struct e{
int fy,a,next;
}e[N];
inline void cs(){
zhuang_bi
memset(head,-1,sizeof(head));
memset(dp,- INF,sizeof(dp));
}
inline void add(int u,int v,int a){
e[++ cnt].a = a;
e[cnt].next = head[u];
e[cnt].fy = v;
head[u] = cnt;
}
inline int find(int u){
if(u > n - m){
dp[u][1] = v[u];
return 1;
}
int sum = 0;
for(re int i = head[u];i > -1;i = e[i].next){
sum += find(e[i].a);
for(re int j = sum;j > 0;j --){
for(re int k = 1;k <= j;k ++){
if(j >= k){
dp[u][j] = max(dp[u][j],dp[u][j - k] + dp[e[i].a][k] - e[i].fy);
}
}
}
}
return sum;
}
signed main(){
cs();
cin>>n>>m;
for(re int i = 1;i <= n - m;i ++){
int k;
cin>>k;
for(re int j = 1;j <= k;j ++){
int a,b;
cin>>a>>b;
add(i,a,b);
}
}
for(re int i = n - m + 1;i <= n;i ++){
cin>>v[i];
}
for(re int i = 1;i <= n;i ++){
dp[i][0] = 0;
}
find(1);
for(re int i = m;i >= 0;i --){
if(dp[1][i] >= 0){
cout<<i;
return 0;
}
}
}
/*
*********************************************
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/