from itertools import accumulate

from bisect import bisect_left

from math import ceil



N,H = list(map(int, input().split()))

AB = []

for _ in range(N):

    AB.append(tuple(map(int, input().split())))



# A昇順、B降順にソート

AB.sort(key=lambda x: (x[0], -x[1]))



# 最後の刀を装備する

equip = AB.pop()



# a_max < b なる刀を集める

b_list = []

for a,b in AB:

    if b > equip[0]:

        b_list.append(b)



# bを攻撃力の高い順に並べ替える

b_list.sort(reverse=True)

b_list_cum = list(accumulate(b_list))

b_list_cum = [0] + b_list_cum

 

ans = 0

# hpがb_list_cum[-1]以下なら、刀投げで終わる

if H <= b_list_cum[-1]:

    ans = bisect_left(b_list_cum,H)

    print(ans)



# 違えば、まずはb>=a_maxなる刀を全部投げ、equipでhp<=bになるまで攻撃し、

# 最後の1手で刀を投げる

else:

    ans = len(b_list_cum)-1

    res = H - b_list_cum[-1]

    a_attack = max(0, int(ceil((res-equip[1]) / equip[0])))

    

    # aで攻撃した分と、最後の1手の刀投げの分を足す

    ans += (a_attack + 1)

    print(ans)
from itertools import accumulate

from bisect import bisect_left

from math import ceil



N,H = list(map(int, input().split()))

A = []

B = []

for _ in range(N):

    a, b = list(map(int, input().split()))

    A.append(a)

    B.append(b)

    

# 最も強いaを探す

a_max = max(A)



# それ以上のbを探す

b_strong = []

for b in B:

    if b >= a_max:

        b_strong.append(b)

        

# bをソートしてcum作る

b_strong.sort(reverse=True)

b_cum = list(accumulate(b_strong))

b_cum = [0] + b_cum

    

# もしHPがb_cum[-1]なら投げてるうちに倒せる

if H <= b_cum[-1]:

    ans = bisect_left(b_cum, H)

    

else:

    ans = len(b_cum) - 1

    ans += ceil((H - b_cum[-1]) / a_max)

    

print(ans)
from itertools import accumulate
from bisect import bisect_left
from math import ceil

N, H = list(map(int, input().split()))
AB = []
for _ in range(N):
    AB.append(tuple(map(int, input().split())))
# A昇順、B降順にソート
AB.sort(key=lambda x: (x[0], -x[1]))
# 最後の刀を装備する
equip = AB.pop()
# a_max < b なる刀を集める
b_list = []
for a, b in AB:
    if b > equip[0]:
        b_list.append(b)
# bを攻撃力の高い順に並べ替える
b_list.sort(reverse=True)
b_list_cum = list(accumulate(b_list))
b_list_cum = [0] + b_list_cum
ans = 0
# hpがb_list_cum[-1]以下なら、刀投げで終わる
if H <= b_list_cum[-1]:
    ans = bisect_left(b_list_cum, H)
    print(ans)
# 違えば、まずはb>=a_maxなる刀を全部投げ、equipでhp<=bになるまで攻撃し、
# 最後の1手で刀を投げる
else:
    ans = len(b_list_cum) - 1
    res = H - b_list_cum[-1]
    a_attack = max(0, int(ceil((res - equip[1]) / equip[0])))
    # aで攻撃した分と、最後の1手の刀投げの分を足す
    ans += a_attack + 1
    print(ans)

from itertools import accumulate
from bisect import bisect_left
from math import ceil

N, H = list(map(int, input().split()))
A = []
B = []
for _ in range(N):
    a, b = list(map(int, input().split()))
    A.append(a)
    B.append(b)
# 最も強いaを探す
a_max = max(A)
# それ以上のbを探す
b_strong = []
for b in B:
    if b >= a_max:
        b_strong.append(b)
# bをソートしてcum作る
b_strong.sort(reverse=True)
b_cum = list(accumulate(b_strong))
b_cum = [0] + b_cum
# もしHPがb_cum[-1]なら投げてるうちに倒せる
if H <= b_cum[-1]:
    ans = bisect_left(b_cum, H)
else:
    ans = len(b_cum) - 1
    ans += ceil((H - b_cum[-1]) / a_max)
print(ans)

-AB = [] +A = [] +B = [] -    AB.append(tuple(map(int, input().split()))) -# A昇順、B降順にソート -AB.sort(key=lambda x: (x[0], -x[1])) -# 最後の刀を装備する -equip = AB.pop() -# a_max < b なる刀を集める -b_list = [] -for a, b in AB: -    if b > equip[0]: -        b_list.append(b) -# bを攻撃力の高い順に並べ替える -b_list.sort(reverse=True) -b_list_cum = list(accumulate(b_list)) -b_list_cum = [0] + b_list_cum -ans = 0 -# hpがb_list_cum[-1]以下なら、刀投げで終わる -if H <= b_list_cum[-1]: -    ans = bisect_left(b_list_cum, H) -    print(ans) -# 違えば、まずはb>=a_maxなる刀を全部投げ、equipでhp<=bになるまで攻撃し、 -# 最後の1手で刀を投げる +    a, b = list(map(int, input().split())) +    A.append(a) +    B.append(b) +# 最も強いaを探す +a_max = max(A) +# それ以上のbを探す +b_strong = [] +for b in B: +    if b >= a_max: +        b_strong.append(b) +# bをソートしてcum作る +b_strong.sort(reverse=True) +b_cum = list(accumulate(b_strong)) +b_cum = [0] + b_cum +# もしHPがb_cum[-1]なら投げてるうちに倒せる +if H <= b_cum[-1]: +    ans = bisect_left(b_cum, H) -    ans = len(b_list_cum) - 1 -    res = H - b_list_cum[-1] -    a_attack = max(0, int(ceil((res - equip[1]) / equip[0]))) -    # aで攻撃した分と、最後の1手の刀投げの分を足す -    ans += a_attack + 1 -    print(ans) +    ans = len(b_cum) - 1 +    ans += ceil((H - b_cum[-1]) / a_max) +print(ans)