#include <bits/stdc++.h>
const int maxn = 1e2 + 1e2;
std::vector<int> val[maxn];
int elim[maxn];
int main() {
  std::ios::sync_with_stdio(false);
  int n, start;
  std::cin >> n >> start;
  int accum = 0;
  for (int i = 0; i < n; i++) {
    val[i].resize(2);
    std::cin >> val[i][0] >> val[i][1];
    val[i][0] -= start;
    accum += val[i][1];
  }
  if (start + accum < 0) {
    std::cout << "NO\n";
    return 0;
  }
  std::fill(elim, elim + n, false);
  int found = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (!elim[j] and val[j][1] >= 0 and val[j][0] <= 0) {
        elim[j] = true;
        found++;
        for (int k = 0; k < n; k++) {
          val[k][0] -= val[j][1];
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    int bestFound = -1;
    for (int j = 0; j < n; j++) {
      int angle = val[j][0] + val[j][1];
      if (!elim[j] and val[j][1] < 0 and val[j][0] <= 0 and
          (bestFound == -1 or angle > val[bestFound][0] + val[bestFound][1])) {
        bestFound = j;
      }
    }
    if (bestFound == -1) {
      break;
    }
    elim[bestFound] = true;
    found++;
    for (int k = 0; k < n; k++) {
      val[k][0] -= val[bestFound][1];
    }
  }
  if (found == n) {
    std::cout << "YES\n";
  } else {
    std::cout << "NO\n";
  }
}
