#include <bits/stdc++.h>
using namespace std;
const int N = 150;
const int M = 6e4 + 5;
int n, m;
struct Node {
  int a, b;
} s[N];
bool cmp(Node a, Node b) {
  if (a.b > 0 && b.b < 0) return 1;
  if (a.b < 0 && b.b > 0) return 0;
  if (a.b > 0 && b.b > 0) return a.a < b.a;
  return a.a + a.b > b.a + b.b;
}
int dp[N][M];
int main() {
  cin >> n >> m;
  memset(dp, 0, sizeof dp);
  for (int i = 1; i <= n; i++) cin >> s[i].a >> s[i].b;
  sort(s + 1, s + 1 + n, cmp);
  int ans = 0;
  dp[0][m] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < M; j++) {
      dp[i][j] = max(dp[i][j], dp[i - 1][j]);
      if (j - s[i].b >= 0 && j - s[i].b < M && dp[i - 1][j - s[i].b] &&
          j - s[i].b >= s[i].a)
        dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - s[i].b] + 1);
      ans = max(ans, dp[i][j]);
    }
  }
  cout << ans - 1 << endl;
}
