#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
constexpr long long MOD = 1000000007LL;
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
bool check(pair<int, int> a, pair<int, int> b) {
  return a.first + a.second > b.first + b.second;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int N, r;
  cin >> N >> r;
  vector<pair<int, int>> A, B;
  for (int i = 0; i < (N); ++i) {
    int a, b;
    cin >> a >> b;
    if (b >= 0)
      A.emplace_back(a, b);
    else
      B.emplace_back(a, b);
  }
  sort((A).begin(), (A).end());
  int ans = 0;
  for (int i = 0; i < (A.size()); ++i) {
    if (r < A[i].first) {
      break;
    }
    r += A[i].second;
    ans++;
  }
  sort((B).begin(), (B).end(), check);
  int M = B.size();
  vector<vector<int>> dp(M + 1, vector<int>(r + 1, -1e9));
  dp[0][r] = ans;
  for (int i = 0; i < (M); ++i) {
    for (int j = r; j >= 0; j--) {
      chmax(dp[i + 1][j], dp[i][j]);
      if (j >= B[i].first and j + B[i].second >= 0)
        chmax(dp[i + 1][j + B[i].second], dp[i][j] + 1);
    }
  }
  cout << *max_element((dp[M]).begin(), (dp[M]).end()) << '\n';
}
