#include using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N,X; cin >> N >> X; vector> Graph(N); for(int i=0; i> u; u--; Graph.at(u).push_back(v); } vector> CS(N-1); for(auto &[c,s] : CS) cin >> c >> s; CS.insert(CS.begin(),{0,0}); long long inf = 1e18; auto dfs = [&](auto dfs,int pos) -> vector { vector ret = {0}; for(auto to : Graph.at(pos)){ auto kid = dfs(dfs,to); if(kid.size() > ret.size()) swap(ret,kid); int n = kid.size(); ret.resize(ret.size()+n,inf); int m = ret.size(); for(int k=m-1-1; k>=0; k--) if(ret.at(k) < inf){ for(int i=1; i= m) break; ret.at(k+i) = min(ret.at(k+i),ret.at(k)+kid.at(i)); } } while(ret.back() == inf) ret.pop_back(); } reverse(ret.begin(),ret.end()); auto [c,s] = CS.at(pos); for(auto &v : ret) v += c; while(s--) ret.push_back(inf); reverse(ret.begin(),ret.end()); ret.at(0) = 0; return ret; }; auto dp = dfs(dfs,0); long long answer = inf; for(int i=X; i