program kadai
implicit none
integer  ::  n
integer,allocatable  ::  a(:,:)
integer  ::  i,j,time

read(*,*) n
allocate(a(2,n))
read(*,*) a

call qsort(a)
time=0
j=0
do i=1,n
time=time+a(1,i)
if (time>a(2,i)) then
    write(*,*) "No"
    stop
end if
end do
write(*,*) "Yes"

contains

!
! swap two arguments
!
subroutine swap(a, b)
implicit none
integer, intent(inout) :: a, b
integer :: c
c = a
a = b
b = c
end subroutine swap

!
! quick sort
!再帰的に定義
subroutine qsort(x)
implicit none
integer, intent(inout)  ::  x(:,:)
integer  ::  first,last
first=1
last=size(x(2,:))
!!前半と後半に区切りたいので、最初と最後の引数を入れたかsubroutineを呼ぶ
call q2sort(x,first,last)
return
end subroutine qsort



!!!クイックソートを実際に行うサブルーチン
recursive subroutine q2sort(x,first,last)
implicit none
integer, intent(inout)  ::  x(:,:)
integer, intent(inout) ::  first,last
integer  ::  fir, las   !!再帰時の頭と尾
integer  ::  i,j
integer  ::  n


!現在真ん中にある要素をpivotとして設定する。
n=x(2,(first+last)/2)

i=first
j=last


!!無限ループの中で、pivot以下を前に、pivot以上を後に動かす
do
    do while (x(2,i)<n)
        i=i+1
    end do
    do while(x(2,j)>n)
    j=j-1
    end do


    if (i>j .or. i==j) then
        exit
    end if

    call swap(x(2,i),x(2,j))
    call swap(x(1,i),x(1,j))
i=i+1
j=j-1

end do


!!pivot以下の組について再帰的に入れ替える
if (first<i-1) then
las=i-1
call q2sort(x,first,las)
end if

!!pivot以上の組について再帰的に入れ替える
if (last>j+1) then
fir=j+1
call q2sort(x,fir,last)
end if

end subroutine q2sort


end program kadai
