#include<bits/stdc++.h>
using namespace std;
int n;
int head[20010],to[40010],val[40010],nxt[40010],tot;
void add(int x,int y,int z){
to[++tot]=y,val[tot]=z;
nxt[tot]=head[x];
head[x]=tot;
}
int start;
int dis[20010],cnt;
void dfs(int x,int fa){
bool p=1;
for(int i=head[x];i;i=nxt[i]){
if(to[i]==fa) continue;
dis[to[i]]=dis[x]-val[i];
if(dis[to[i]]<=0 && p==1){
cnt++,p=0;
break;
}
}
for(int i=head[x];i;i=nxt[i]){
if(to[i]==fa) continue;
if(p==0) dis[to[i]]=start-val[i];
dfs(to[i],x);
}
}
int maxn;
int main() {
cin>>n;
for(int i=1;i<=n;i++){
int m;
cin>>m;
for(int j=1;j<=m;j++){
int u,x;
cin>>u>>x;
add(i,u,x);
maxn=max(maxn,x);
}
}
cin>>start;
if(maxn>=start){
cout<<"No solution.";
return 0;
}
dis[1]=start;
dfs(1,0);
cout<<cnt;
return 0;
}