#include <bits/stdc++.h>
using namespace std;
template <typename T>
void sort(T& v) {
  sort(v.begin(), v.end());
}
template <typename T>
void revs(T& v) {
  reverse(v.begin(), v.end());
}
template <typename T>
void uniq(T& v) {
  sort(v);
  v.erase(unique(v.begin(), v.end()));
}
template <typename T>
T cums(T& v) {
  T r(v.size());
  partial_sum(v.begin(), v.end(), r);
  return r;
}
template <typename T>
void show(T& v, char delim = ' ', char end = '\n') {
  for (int i = 0; i < v.size() - 1; i++) cout << v[i] << delim;
  cout << v[v.size() - 1] << end;
}
template <typename T>
T acum(vector<T>& v, T b = 0) {
  return accumulate(v.begin(), v.end(), b);
}
template <typename T>
vector<T> inpt(int n) {
  vector<T> v(n);
  for (int i = 0; i < n; i++) cin >> v[i];
  return v;
}
static inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
struct Solver {
  Solver() {}
  int solve() {}
};
int main() {
  int n;
  while (n = in()) {
    vector<pair<int, int> > vs;
    for (int i = 0; i < n; i++) {
      int cost, lim;
      cost = in();
      lim = in();
      vs.push_back(make_pair(cost, lim));
    }
    sort(vs);
    int tc = 0;
    bool ok = true;
    for (int i = 0; i < n; i++) {
      if (vs[i].second < tc) {
        ok = false;
        break;
      }
      tc += vs[i].first;
      if (vs[i].second < tc) {
        ok = false;
        break;
      }
    }
    if (ok)
      puts("Yes");
    else
      puts("No");
  }
  return (0);
}
