#include <bits/stdc++.h>
using namespace std;
bool flag = 0;
long long n, a;
struct ss {
  long long le, p, q;
} s[110];
long long cmp(ss a, ss b) {
  if (a.le > b.le)
    return true;
  else if (a.le == b.le) {
    if (a.le == 1) {
      if (a.p == b.p) {
        return false;
      } else
        return a.p < b.p;
    }
    if (a.le == 0) {
      if ((a.p + a.q) == (b.p + b.q)) {
        return false;
      } else
        return (a.p + a.q) > (b.p + b.q);
    }
  } else
    return false;
}
long long cmp1(ss a, ss b) {
  if (a.le > b.le)
    return true;
  else if (a.le == b.le) {
    if (a.le == 1) {
      if (a.p == b.p) {
        return false;
      } else
        return a.p < b.p;
    }
    if (a.le == 0) {
      if (a.q == b.q) {
        return false;
      } else
        return a.q > b.q;
    }
  } else
    return false;
}
int main(int argc, char const *argv[]) {
  cin >> n >> a;
  int bb = a;
  for (int i = 0; i < n; ++i) {
    cin >> s[i].p >> s[i].q;
    if (s[i].q >= 0) {
      s[i].le = 1;
    } else {
      s[i].le = 0;
    }
  }
  sort(s, s + n, cmp);
  int num = 0;
  for (int i = 0; i < n; ++i) {
    if (a >= s[i].p) {
      a += s[i].q;
      num++;
    }
  }
  if (a < 0) {
    num--;
  }
  sort(s, s + n, cmp1);
  int num1 = 0;
  for (int i = 0; i < n; ++i) {
    if (bb >= s[i].p) {
      bb += s[i].q;
      num1++;
    }
  }
  if (bb < 0) {
    num1--;
  }
  cout << max(num, num1) << endl;
  return 0;
}
