#include using namespace std; int main(){ using ll=long long; ll inf=1e18; int n,x; cin>>n>>x; vector> g(n); vector c(n),s(n); for (int i=1;i>p; p--; g[p].push_back(i); } int m=0; for (int i=1;i>c[i]>>s[i]; m+=s[i]; } vector sum(n); vector> dp(n,vector(m+1,inf)); auto dfs=[&](auto dfs,int v,int par)-> void { dp[v][s[v]]=c[v]; sum[v]+=s[v]; for (int u:g[v]){ dfs(dfs,u,v); auto next=dp[v]; for (int i=0;i<=m;i++){ for (int j=0;j<=m;j++){ if (i+j>m) break; next[i+j]=min(next[i+j],dp[v][i]+dp[u][j]); } } swap(next,dp[v]); sum[v]+=sum[u]; } dp[v][0]=0; }; dfs(dfs,0,-1); cout<