#include <bits/stdc++.h>
using namespace std;
struct Node {
int v,d;
};
int n;
int k,v,d;
int a;
vector<Node> adj[20010];
bool vis[20010];
int ans;
int dfs(int p) {
int res=0;
for(auto i:adj[p]) {
if(vis[i.v]) {
continue;
}
vis[i.v]=1;
int df=dfs(i.v);
if(df+i.d>=a) {
if(res==-1){
continue;
}
ans++;
res=-1;
}
res=(res==-1) ? -1 : max(res,df+i.d);
}
return (res==-1) ? 0 : res;
}
int md=0;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1; i<=n; i++) {
cin>>k;
while(k--) {
cin>>v>>d;
md=max(md,d);
adj[i].push_back({v,d});
}
}
cin>>a;
if(md>=a){
cout<<"No solution.";
return 0;
}
vis[1]=1;
dfs(1);
cout<<ans;
return 0;
}