#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <list>
#include <numeric>
#include <utility>
#include <ctime>
#define INF 100000000
#define LINF 9000000000000000000
#define mod 1000000007
 
#define rep(i,n) for(int i=0;i<int(n);i++)
#define REP(i,a,b) for(int i=(a);i<int(b);i++)
#define all(x) (x).begin(),x.end()
#define pb push_back
#define mp make_pair
#define MOD(x) (x%(mod))
 
using namespace std;
 
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;
 
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
bool debug=false;

/*---------------------------------------------------*/

int n;
int weight[30],max_weight[30];

bool DFS(int now,int cnt,bool used[]){
  //cout<<"DEBUG: "<<now<<" "<<cnt<<endl;
  bool ok=false;
  if(cnt==n)return true;
  rep(i,n){
    if(!used[i]&&now+weight[i]<=max_weight[i]){
      used[i]=true;
      ok=DFS(now+weight[i],cnt+1,used);
      if(ok)return true;
      used[i]=false;
    }
  }
  return false;
}

int main(){
  bool used[26];
  while(cin>>n){
    if(n==0)break;
    rep(i,n)cin>>weight[i]>>max_weight[i];
    bool ok=false;
    rep(i,n){
      used[i]=true;
      if(DFS(weight[i],1,used))ok=true;
      used[i]=false;
    }
    if(ok)cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
  }
}