#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
int n, x;
int t[maxn], h[maxn], m[maxn];
vector<pair<int, int> > c[2];
multiset<int> a[2];
int zkus(int typ);
int main() {
  scanf("%d%d", &n, &x);
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d", &t[i], &h[i], &m[i]);
    c[t[i]].push_back(make_pair((h[i]), (m[i])));
  }
  sort(c[0].begin(), c[0].end());
  sort(c[1].begin(), c[1].end());
  printf("%d\n", max(zkus(0), zkus(1)));
  return 0;
}
int zkus(int typ) {
  int akt = x;
  a[0].clear();
  a[1].clear();
  int id0 = 0, id1 = 0;
  int pocet = 0;
  while (1) {
    while (id0 < c[0].size() && c[0][id0].first <= akt) {
      a[0].insert(c[0][id0].second);
      id0++;
    }
    while (id1 < c[1].size() && c[1][id1].first <= akt) {
      a[1].insert(c[1][id1].second);
      id1++;
    }
    if (!a[typ].empty()) {
      pocet++;
      akt += *(--a[typ].end());
      a[typ].erase(--a[typ].end());
      typ = 1 - typ;
    } else {
      break;
    }
  }
  return pocet;
}
