#include <bits/stdc++.h>
using namespace std;
int dp[5002][5002][2];
vector<vector<int> > adj(12345);
int subtree[5004], c[5003], d[5003], dp1[5003], dp2[5003];
int dfs(int u) {
  int i, j, k, sumi = 1;
  subtree[u] = 1;
  for (i = 0; i < adj[u].size(); i++) {
    dfs(adj[u][i]);
    subtree[u] += subtree[adj[u][i]];
  }
  if (subtree[u] == 1) {
    dp[u][1][0] = c[u];
    dp[u][1][1] = c[u] - d[u];
    dp[u][0][1] = 0;
    dp[u][0][0] = 0;
    return 0;
  }
  for (i = 0; i < subtree[u] + 2; i++) {
    dp1[i] = (1000 * 1000 * 1000 + 5);
    dp2[i] = (1000 * 1000 * 1000 + 5);
    dp[u][i][0] = (1000 * 1000 * 1000 + 5);
    dp[u][i][1] = (1000 * 1000 * 1000 + 5);
  }
  dp[u][1][1] = c[u] - d[u];
  sumi = 1;
  for (i = 0; i < adj[u].size(); i++) {
    for (j = 0; j < sumi + 1; j++) {
      for (k = 0; k < subtree[adj[u][i]] + 1; k++) {
        dp1[j + k] = min(dp1[j + k], dp[u][j][1] + dp[adj[u][i]][k][1]);
        dp1[j + k] = min(dp1[j + k], (1000 * 1000 * 1000 + 5));
      }
    }
    sumi += subtree[adj[u][i]];
    for (j = 0; j < sumi + 1; j++) {
      dp[u][j][1] = min(dp[u][j][1], dp1[j]);
      dp1[j] = (1000 * 1000 * 1000 + 5);
    }
  }
  sumi = 1;
  dp1[0] = 0;
  for (i = 0; i < adj[u].size(); i++) {
    for (j = 0; j < sumi + 1; j++) {
      for (k = 0; k < subtree[adj[u][i]] + 1; k++) {
        dp2[j + k] = min(dp2[j + k], dp1[j] + dp[adj[u][i]][k][0]);
        dp2[j + k] = min(dp2[j + k], (1000 * 1000 * 1000 + 5));
      }
    }
    sumi += subtree[adj[u][i]];
    for (j = 0; j < sumi + 1; j++) {
      dp1[j] = min(dp1[j], dp2[j]);
      dp2[j] = (1000 * 1000 * 1000 + 5);
    }
  }
  for (i = 0; i < subtree[u] + 1; i++) {
    dp[u][i][1] = min(dp[u][i][1], dp1[i]);
    dp1[i] = (1000 * 1000 * 1000 + 5);
  }
  dp[u][1][0] = c[u];
  dp[u][0][0] = 0;
  sumi = 1;
  for (i = 0; i < adj[u].size(); i++) {
    for (j = 0; j < sumi + 1; j++) {
      for (k = 0; k < subtree[adj[u][i]] + 1; k++) {
        dp1[j + k] = min(dp1[j + k], dp[u][j][0] + dp[adj[u][i]][k][0]);
        dp1[j + k] = min(dp1[j + k], (1000 * 1000 * 1000 + 5));
      }
    }
    sumi += subtree[adj[u][i]];
    for (j = 0; j < sumi + 1; j++) {
      dp[u][j][0] = min(dp[u][j][0], dp1[j]);
      dp1[j] = (1000 * 1000 * 1000 + 5);
    }
  }
  return 0;
}
int main() {
  std::ios::sync_with_stdio(false);
  int n, val;
  int i, u;
  cin >> n >> val;
  cin >> c[0] >> d[0];
  for (i = 1; i < n; i++) {
    cin >> c[i] >> d[i];
    cin >> u;
    u--;
    adj[u].push_back(i);
  }
  dfs(0);
  for (i = n; i >= 0; i--) {
    if (dp[0][i][1] <= val) {
      cout << i << endl;
      return 0;
    }
  }
}
