#include <bits/stdc++.h>
using namespace std;
static const double EPS = 1e-8;
class Edge {
 public:
  int visited;
  short load;
  Edge(int v, int l) {
    visited = v;
    load = l;
  }
  Edge() : load(0), visited(0) {}
};
struct Land {
  short treasure;
  short bridge;
} island[25];
bool gVisited[1 << 25];
int calcT(int visited, int n) {
  int res = 0;
  for (int i = 0; i < n; i++) {
    if (visited & (1 << i)) res += island[i].treasure;
  }
  return res;
}
void dfs(int s, int visited, int n) {
  for (int i = 0; i < n; i++) {
    if (!gVisited[visited | (1 << i)] &&
        (calcT(visited, n) + island[i].treasure <= island[i].bridge)) {
      gVisited[visited | (1 << i)] = true;
      dfs(s, visited | (1 << i), n);
    }
  }
}
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++) {
      dfs(i, (1 << i), n);
    }
    printf("%s\n", gVisited[(1 << n) - 1] ? "Yes" : "No");
  }
}
