#include <bits/stdc++.h>
using namespace std;
static const double EPS = 1e-8;
class Edge {
 public:
  int visited;
  int load;
  Edge(int v, int l) {
    visited = v;
    load = l;
  }
  Edge() : load(0), visited(0) {}
};
struct Land {
  int treasure;
  int bridge;
} island[25];
bool gVisited[1 << 25];
int main() {
  int n;
  while (~scanf("%d", &n)) {
    if (n == 0) break;
    memset(gVisited, 0, sizeof(gVisited));
    queue<Edge> que;
    for (int i = 0; i < n; i++) {
      int w, bridge;
      scanf("%d %d", &w, &bridge);
      island[i].bridge = bridge;
      island[i].treasure = w;
    }
    for (int i = 0; i < n; i++) {
      if (island[i].bridge >= island[i].treasure) {
        Edge e(1 << i, island[i].treasure);
        que.push(e);
      }
    }
    int res = 0;
    while (!que.empty()) {
      Edge e = que.front();
      que.pop();
      res = max(res, e.visited);
      int tmp;
      for (int i = 0; i < n; i++) {
        tmp = e.visited;
        if (!(e.visited & (1 << i)) &&
            (island[i].bridge >= e.load + island[i].treasure)) {
          tmp |= (1 << i);
          if (gVisited[tmp]) continue;
          gVisited[tmp] = true;
          Edge next(tmp, e.load + island[i].treasure);
          que.push(next);
        }
      }
    }
    printf("%s\n", res == (1 << n) - 1 ? "Yes" : "No");
  }
}
