#include <bits/stdc++.h>
using namespace std;
int n, b;
int c[5005], d[5005];
int f[5005][5005];
int g[5005][5005];
int sz[5005], fat[5005];
vector<int> vec[5005];
void init() {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) f[i][j] = g[i][j] = 1000000002;
}
void dfs(int v, int w) {
  sz[v]++;
  int mas = -1, num = -1;
  for (int i = 0; i < vec[v].size(); i++) {
    int to = vec[v][i];
    if (to == w) continue;
    dfs(to, v);
    sz[v] += sz[to];
    if (sz[to] > mas) {
      mas = sz[to];
      num = to;
    }
  }
  fat[v] = num;
}
void solve(int v, int w) {
  int *f2;
  int *g2;
  int SZ = sz[v] + 5;
  f2 = new int[SZ];
  g2 = new int[SZ];
  f2[0] = g2[0] = 0;
  for (int i = 1; i < SZ; i++) f2[i] = g2[i] = 1000000002;
  f[v][1] = f2[1] = c[v] - d[v];
  g[v][1] = g2[1] = c[v];
  int sum = 1;
  for (int q = 0; q < vec[v].size(); q++) {
    int to = vec[v][q];
    if (to == w) continue;
    solve(to, v);
    if (to == fat[v]) continue;
    for (int i = 1; i <= sum + sz[to]; i++) {
      for (int j = max(0, i - sum); j <= min(sz[to], i - 1); j++)
        f2[i] = min(f2[i], f[v][i - j] + f[to][j]);
      for (int j = max(0, i - sum); j <= min(sz[to], i); j++)
        g2[i] = min(g2[i], g[v][i - j] + g[to][j]);
    }
    sum += sz[to];
    for (int i = 1; i <= sum; i++) {
      f[v][i] = min(f[v][i], f2[i]);
      g[v][i] = min(g[v][i], g2[i]);
      f2[i] = 1000000002;
      g2[i] = 1000000002;
    }
  }
  if (fat[v] == -1) return;
  int to = fat[v];
  if (sz[to] > sz[v] - sz[to]) {
    for (int i = 1; i <= sz[v]; i++) {
      for (int j = 1; j <= min(sz[v] - sz[to], i); j++)
        f2[i] = min(f2[i], f[v][j] + f[to][i - j]);
      for (int j = 0; j <= min(sz[v] - sz[to], i); j++)
        g2[i] = min(g2[i], g[v][j] + g[to][i - j]);
    }
  } else {
    for (int i = 1; i <= sz[v]; i++) {
      for (int j = 0; j <= min(sz[to], i - 1); j++)
        f2[i] = min(f2[i], f[v][i - j] + f[to][j]);
      for (int j = 0; j <= min(sz[to], i); j++)
        g2[i] = min(g2[i], g[v][i - j] + g[to][j]);
    }
  }
  for (int i = 1; i <= sz[v]; i++) {
    f[v][i] = min(f[v][i], f2[i]);
    g[v][i] = min(g[v][i], g2[i]);
    f[v][i] = min(f[v][i], g[v][i]);
  }
  delete[] f2;
  delete[] g2;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> b;
  for (int i = 1; i <= n; i++) {
    cin >> c[i] >> d[i];
    if (i > 1) {
      int u;
      cin >> u;
      vec[i].push_back(u);
      vec[u].push_back(i);
    }
  }
  init();
  dfs(1, 0);
  solve(1, 0);
  while (f[1][n] > b) n--;
  cout << n << endl;
}
