#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 3e5 + 10;
int n, m, a[maxn];
ll st, ans, f[maxn], g[maxn];
vector<int> e[maxn];
void dfs(int u) {
for (int v : e[u]) dfs(v);
sort(e[u].begin(), e[u].end(), [](int x, int y) {return g[x] < g[y]; });
f[u] += a[u]; g[u] -= a[u];
for (int v : e[u]) if (f[v]) {
if (g[v] > f[u]) g[u] = max(g[u], g[v] - f[u]);
f[u] += f[v];
} f[u] = max(f[u], 0ll); g[u] = max(g[u], 0ll);
}
void dfs2(int u) {
if (!f[u] || ans + a[u] < 0) return;
if (g[u] <= ans) { ans += f[u]; return; }
ll res = ans; ans += a[u];
for (int v : e[u]) dfs2(v);
if (ans < res) ans = res;
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> st; ans = st;
for (int i = 1, x; i <= n; i++) cin >> a[i] >> x, e[x].push_back(i);
dfs(0); dfs2(0); cout << ans - st << '\n';
return 0;
}