def merge_sort(arr):

 if len(arr) <= 1:

  return arr

 mid = len(arr) // 2

# ここで分割を行う

 left = arr[:mid]

 right = arr[mid:]

# 再帰的に分割を行う

 left = merge_sort(left)

 right = merge_sort(right)

# returnが返ってきたら、結合を行い、結合したものを次に渡す

 return merge(left, right)

def merge(left, right):

 merged = []

 l_i, r_i = 0, 0

# ソート済み配列をマージするため、それぞれ左から見ていくだけで良い

 while l_i < len(left) and r_i < len(right):

    # ここで=をつけることで安定性を保っている

  if left[l_i][1] <= right[r_i][1]:

   merged.append(left[l_i])

   l_i += 1

  else:

   merged.append(right[r_i])

   r_i += 1



# 上のwhile文のどちらかがFalseになった場合終了するため、あまりをextendする

 if l_i < len(left):

  merged.extend(left[l_i:])

 if r_i < len(right):

  merged.extend(right[r_i:])

 return merged

import sys

input = sys.stdin.readline

N=int(eval(input()))

lst=[0]*N

lst=[list(map(int,input().split())) for i in range(N)]

lsta=merge_sort(lst)

ans=0

t=0

for i in range(N):

 t+=lsta[i][0]

 if t>lsta[i][1]:

  ans+=1

if ans==0:

 print("Yes")

else:

 print("No")

import sys

input = sys.stdin.readline

N=int(eval(input()))

lst=[0]*N

lst=[list(map(int,input().split())) for i in range(N)]

lst.sort(key=lambda x: x[1])

ans=0

t=0

for i in range(N):

 t+=lst[i][0]

 if t>lst[i][1]:

  ans+=1

if ans==0:

 print("Yes")

else:

 print("No")
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    # ここで分割を行う
    left = arr[:mid]
    right = arr[mid:]
    # 再帰的に分割を行う
    left = merge_sort(left)
    right = merge_sort(right)
    # returnが返ってきたら、結合を行い、結合したものを次に渡す
    return merge(left, right)


def merge(left, right):
    merged = []
    l_i, r_i = 0, 0
    # ソート済み配列をマージするため、それぞれ左から見ていくだけで良い
    while l_i < len(left) and r_i < len(right):
        # ここで=をつけることで安定性を保っている
        if left[l_i][1] <= right[r_i][1]:
            merged.append(left[l_i])
            l_i += 1
        else:
            merged.append(right[r_i])
            r_i += 1
    # 上のwhile文のどちらかがFalseになった場合終了するため、あまりをextendする
    if l_i < len(left):
        merged.extend(left[l_i:])
    if r_i < len(right):
        merged.extend(right[r_i:])
    return merged


import sys

input = sys.stdin.readline
N = int(eval(input()))
lst = [0] * N
lst = [list(map(int, input().split())) for i in range(N)]
lsta = merge_sort(lst)
ans = 0
t = 0
for i in range(N):
    t += lsta[i][0]
    if t > lsta[i][1]:
        ans += 1
if ans == 0:
    print("Yes")
else:
    print("No")

import sys

input = sys.stdin.readline
N = int(eval(input()))
lst = [0] * N
lst = [list(map(int, input().split())) for i in range(N)]
lst.sort(key=lambda x: x[1])
ans = 0
t = 0
for i in range(N):
    t += lst[i][0]
    if t > lst[i][1]:
        ans += 1
if ans == 0:
    print("Yes")
else:
    print("No")

-def merge_sort(arr): -    if len(arr) <= 1: -        return arr -    mid = len(arr) // 2 -    # ここで分割を行う -    left = arr[:mid] -    right = arr[mid:] -    # 再帰的に分割を行う -    left = merge_sort(left) -    right = merge_sort(right) -    # returnが返ってきたら、結合を行い、結合したものを次に渡す -    return merge(left, right) - - -def merge(left, right): -    merged = [] -    l_i, r_i = 0, 0 -    # ソート済み配列をマージするため、それぞれ左から見ていくだけで良い -    while l_i < len(left) and r_i < len(right): -        # ここで=をつけることで安定性を保っている -        if left[l_i][1] <= right[r_i][1]: -            merged.append(left[l_i]) -            l_i += 1 -        else: -            merged.append(right[r_i]) -            r_i += 1 -    # 上のwhile文のどちらかがFalseになった場合終了するため、あまりをextendする -    if l_i < len(left): -        merged.extend(left[l_i:]) -    if r_i < len(right): -        merged.extend(right[r_i:]) -    return merged - - -lsta = merge_sort(lst) +lst.sort(key=lambda x: x[1]) -    t += lsta[i][0] -    if t > lsta[i][1]: +    t += lst[i][0] +    if t > lst[i][1]: