#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
ll s;
cin >> n >> s;
vector<ll> p(n + 1), w(n + 1);
vector<vector<int>> g(n + 1);
for (int i = 1; i <= n; ++i) {
cin >> w[i] >> p[i];
g[p[i]].push_back(i);
}
struct cmp {
bool operator()(const pair<ll, ll> &a, const pair<ll, ll> &b) const {
if (a.first != b.first)
return a.first > b.first;
return a.second > b.second;
}
};
vector<multiset<pair<ll, ll>, cmp>> gr(n + 1);
for (int i = n; ~i; --i) {
for (int j : g[i]) {
if (gr[i].size() < gr[j].size())
swap(gr[i], gr[j]);
gr[i].insert(gr[j].begin(), gr[j].end());
gr[j].clear();
}
ll sum = w[i], mn = min(0ll, w[i]);
while (gr[i].size()) {
auto it = gr[i].begin();
auto [cmn, csum] = *it;
if (sum > 0 && mn > cmn)
break;
gr[i].erase(it);
mn = min(mn, sum + cmn);
sum += csum;
}
if (sum > 0) {
gr[i].insert({mn, sum});
}
}
ll ans = 0;
for (auto [mn, sum] : gr[0]) {
if (s + ans + mn < 0)
break;
ans += sum;
}
cout << ans;
return 0;
}