from math import ceil





def solve(h, aa, bb):

    max_a = max(aa)

    i = 0

    for b in sorted(bb, reverse=True):

        if b <= max_a:

            break

        i += 1

        h -= b

        if h <= 0:

            return i

    return i + ceil(h / max_a)





n, h = list(map(int, input().split()))

aa, bb = list(zip(*(list(map(int, input().split())) for _ in range(n))))



print((solve(h, aa, bb)))

from math import ceil





def solve(h, aa, bb):

    max_a = max(aa)

    i = 0

    for b in sorted(bb, reverse=True):

        if b <= max_a:

            break

        i += 1

        h -= b

        if h <= 0:

            return i

    return i + ceil(h / max_a)





n, h = list(map(int, input().split()))

aa, bb = [], []

for _ in range(n):

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

    aa.append(a)

    bb.append(b)



print((solve(h, aa, bb)))

from math import ceil


def solve(h, aa, bb):
    max_a = max(aa)
    i = 0
    for b in sorted(bb, reverse=True):
        if b <= max_a:
            break
        i += 1
        h -= b
        if h <= 0:
            return i
    return i + ceil(h / max_a)


n, h = list(map(int, input().split()))
aa, bb = list(zip(*(list(map(int, input().split())) for _ in range(n))))
print((solve(h, aa, bb)))

from math import ceil


def solve(h, aa, bb):
    max_a = max(aa)
    i = 0
    for b in sorted(bb, reverse=True):
        if b <= max_a:
            break
        i += 1
        h -= b
        if h <= 0:
            return i
    return i + ceil(h / max_a)


n, h = list(map(int, input().split()))
aa, bb = [], []
for _ in range(n):
    a, b = list(map(int, input().split()))
    aa.append(a)
    bb.append(b)
print((solve(h, aa, bb)))

-aa, bb = list(zip(*(list(map(int, input().split())) for _ in range(n)))) +aa, bb = [], [] +for _ in range(n): +    a, b = list(map(int, input().split())) +    aa.append(a) +    bb.append(b)