Long long ago, there was a thief. Looking for treasures, he was running about all over the world. One day, he heard a rumor that there were islands that had large amount of treasures, so he decided to head for there.

Finally he found n islands that had treasures and one island that had nothing. Most of islands had seashore and he can land only on an island which had nothing. He walked around the island and found that there was an old bridge between this island and each of all other n islands.

He tries to visit all islands one by one and pick all the treasures up. Since he is afraid to be stolen, he visits with bringing all treasures that he has picked up. He is a strong man and can bring all the treasures at a time, but the old bridges will break if he cross it with taking certain or more amount of treasures.

Please write a program that judges if he can collect all the treasures and can be back to the island where he land on by properly selecting an order of his visit.

Constraints

* 1 ≤ n ≤ 25

Input

Input consists of several datasets.

The first line of each dataset contains an integer n. Next n lines represents information of the islands. Each line has two integers, which means the amount of treasures of the island and the maximal amount that he can take when he crosses the bridge to the islands, respectively.

The end of input is represented by a case with n = 0.

Output

For each dataset, if he can collect all the treasures and can be back, print "Yes" Otherwise print "No"

Example

Input

3
2 3
3 6
1 2
3
2 3
3 5
1 2
0


Output

Yes
No

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
	static PrintWriter out = new PrintWriter(System.out);
	static Scanner stdIn = new Scanner(System.in);
	static FastScanner sc = new FastScanner();

	
	public static void main(String[] args) {
		IN:while(true) {
			int n = sc.nextInt();
			if(n == 0) break;
			Data[] A = new Data[n];
			for(int i = 0; i < n; i++) {
				A[i] = new Data(sc.nextInt(), sc.nextInt());
			}
			Arrays.sort(A,new CompB());
			int now = 0;
			for(int i = 0; i < n; i++) {
				now += A[i].a;
				if(now > A[i].b){
					out.println("No");
					continue IN;
				}
			}
			out.println("Yes");
			
		} 
		out.flush();
		
		
	}
	
	static class Data {
		int a;
		int b;
		Data(int c, int d) {
			a = c;
			b = d;
		}
	}
	
	static class CompA implements Comparator<Data> {

		@Override
		public int compare(Data arg0, Data arg1) {
			return arg0.a - arg1.a;
		}
		
	}
	
	static class CompB implements Comparator<Data> {

		@Override
		public int compare(Data arg0, Data arg1) {
			return arg0.b - arg1.b;
		}
		
	}

}

class FastScanner {
    private final InputStream in = System.in;
    private final byte[] buffer = new byte[1024];
    private int ptr = 0;
    private int buflen = 0;
    private boolean hasNextByte() {
        if (ptr < buflen) {
            return true;
        }else{
            ptr = 0;
            try {
                buflen = in.read(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (buflen <= 0) {
                return false;
            }
        }
        return true;
    }
    private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}
    private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}
    private void skipUnprintable() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;}
    public boolean hasNext() { skipUnprintable(); return hasNextByte();}
    public String next() {
        if (!hasNext()) throw new NoSuchElementException();
        StringBuilder sb = new StringBuilder();
        int b = readByte();
        while(isPrintableChar(b)) {
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }
    public long nextLong() {
        if (!hasNext()) throw new NoSuchElementException();
        long n = 0;
        boolean minus = false;
        int b = readByte();
        if (b == '-') {
            minus = true;
            b = readByte();
        }
        if (b < '0' || '9' < b) {
            throw new NumberFormatException();
        }
        while(true){
            if ('0' <= b && b <= '9') {
                n *= 10;
                n += b - '0';
            }else if(b == -1 || !isPrintableChar(b)){
                return minus ? -n : n;
            }else{
                throw new NumberFormatException();
            }
            b = readByte();
        }
    }
     
    public int nextInt() {
        return (int)nextLong();
    }
     
    public double nextDouble() {
        return Double.parseDouble(next());
    }
     
 
}