# -*- coding: utf-8 -*-



from bisect import bisect_left



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

A, B = [0]*N, [0]*N

for i in range(N):

    A[i], B[i] = list(map(int, input().split()))



a_max = max(A)

B.sort()

# 一番強い振る刀より弱い投げる刀はいらない

B2 = list(reversed(B[bisect_left(B, a_max):]))



cnt = 0

# 投げるだけで倒せるか

if H <= sum(B2):

    # 強い方から順番に投げる

    for i in range(len(B2)):

        cnt += 1

        H -= B2[i]

        if H <= 0:

            print(cnt)

            exit()

else:

    # 全部投げた結果

    H -= sum(B2)

    cnt += len(B2)

    # 倒すまでに振る回数

    cnt += -(-H // a_max)

    print(cnt)

# -*- coding: utf-8 -*-



import sys



def input(): return sys.stdin.readline().strip()

def list2d(a, b, c): return [[c] * b for i in range(a)]

def list3d(a, b, c, d): return [[[d] * c for j in range(b)] for i in range(a)]

def list4d(a, b, c, d, e): return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]

def ceil(x, y=1): return int(-(-x // y))

def INT(): return int(eval(input()))

def MAP(): return list(map(int, input().split()))

def LIST(N=None): return list(MAP()) if N is None else [INT() for i in range(N)]

def Yes(): print('Yes')

def No(): print('No')

def YES(): print('YES')

def NO(): print('NO')

sys.setrecursionlimit(10 ** 9)

INF = 10 ** 18

MOD = 10 ** 9 + 7



N, H = MAP()

A = [0] * N

B = [0] * N

for i in range(N):

    a, b = MAP()

    A[i] = a

    B[i] = b



A.sort(reverse=1)

B.sort(reverse=1)



mxa = A[0]

cnt = 0

for b in B:

    if H <= 0 or b <= mxa:

        break

    H = max(0, H-b)

    cnt += 1

cnt += ceil(H, mxa)

print(cnt)

# -*- coding: utf-8 -*-
from bisect import bisect_left

N, H = list(map(int, input().split()))
A, B = [0] * N, [0] * N
for i in range(N):
    A[i], B[i] = list(map(int, input().split()))
a_max = max(A)
B.sort()
# 一番強い振る刀より弱い投げる刀はいらない
B2 = list(reversed(B[bisect_left(B, a_max) :]))
cnt = 0
# 投げるだけで倒せるか
if H <= sum(B2):
    # 強い方から順番に投げる
    for i in range(len(B2)):
        cnt += 1
        H -= B2[i]
        if H <= 0:
            print(cnt)
            exit()
else:
    # 全部投げた結果
    H -= sum(B2)
    cnt += len(B2)
    # 倒すまでに振る回数
    cnt += -(-H // a_max)
    print(cnt)

# -*- coding: utf-8 -*-
import sys


def input():
    return sys.stdin.readline().strip()


def list2d(a, b, c):
    return [[c] * b for i in range(a)]


def list3d(a, b, c, d):
    return [[[d] * c for j in range(b)] for i in range(a)]


def list4d(a, b, c, d, e):
    return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]


def ceil(x, y=1):
    return int(-(-x // y))


def INT():
    return int(eval(input()))


def MAP():
    return list(map(int, input().split()))


def LIST(N=None):
    return list(MAP()) if N is None else [INT() for i in range(N)]


def Yes():
    print("Yes")


def No():
    print("No")


def YES():
    print("YES")


def NO():
    print("NO")


sys.setrecursionlimit(10**9)
INF = 10**18
MOD = 10**9 + 7
N, H = MAP()
A = [0] * N
B = [0] * N
for i in range(N):
    a, b = MAP()
    A[i] = a
    B[i] = b
A.sort(reverse=1)
B.sort(reverse=1)
mxa = A[0]
cnt = 0
for b in B:
    if H <= 0 or b <= mxa:
        break
    H = max(0, H - b)
    cnt += 1
cnt += ceil(H, mxa)
print(cnt)

-from bisect import bisect_left +import sys -N, H = list(map(int, input().split())) -A, B = [0] * N, [0] * N + +def input(): +    return sys.stdin.readline().strip() + + +def list2d(a, b, c): +    return [[c] * b for i in range(a)] + + +def list3d(a, b, c, d): +    return [[[d] * c for j in range(b)] for i in range(a)] + + +def list4d(a, b, c, d, e): +    return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)] + + +def ceil(x, y=1): +    return int(-(-x // y)) + + +def INT(): +    return int(eval(input())) + + +def MAP(): +    return list(map(int, input().split())) + + +def LIST(N=None): +    return list(MAP()) if N is None else [INT() for i in range(N)] + + +def Yes(): +    print("Yes") + + +def No(): +    print("No") + + +def YES(): +    print("YES") + + +def NO(): +    print("NO") + + +sys.setrecursionlimit(10**9) +INF = 10**18 +MOD = 10**9 + 7 +N, H = MAP() +A = [0] * N +B = [0] * N -    A[i], B[i] = list(map(int, input().split())) -a_max = max(A) -B.sort() -# 一番強い振る刀より弱い投げる刀はいらない -B2 = list(reversed(B[bisect_left(B, a_max) :])) +    a, b = MAP() +    A[i] = a +    B[i] = b +A.sort(reverse=1) +B.sort(reverse=1) +mxa = A[0] -# 投げるだけで倒せるか -if H <= sum(B2): -    # 強い方から順番に投げる -    for i in range(len(B2)): -        cnt += 1 -        H -= B2[i] -        if H <= 0: -            print(cnt) -            exit() -else: -    # 全部投げた結果 -    H -= sum(B2) -    cnt += len(B2) -    # 倒すまでに振る回数 -    cnt += -(-H // a_max) -    print(cnt) +for b in B: +    if H <= 0 or b <= mxa: +        break +    H = max(0, H - b) +    cnt += 1 +cnt += ceil(H, mxa) +print(cnt)