def d_Katana_Thrower(N, H, S):

    import numpy

    import math

    swing = numpy.asarray([x[0] for x in S])

    throw = numpy.asarray([x[1] for x in S])



    swing_max = numpy.max(swing)



    throw_t = throw[throw >= swing_max]

    throw_t = sorted(throw_t, reverse=True)

    hp = H

    ans = 0

    for d in throw_t:

        if hp <= 0:

            break

        hp -= d

        ans += 1



    if hp > 0:

        ans += math.ceil(hp / swing_max)

    return ans

  

N,H=[int(i) for i in input().split()]

S=[[int(i) for i in input().split()] for j in range(N)]

print((d_Katana_Thrower(N, H, S)))
def d_katana_thrower(N, H, Swords):

    import math

    # 振ったとき最もダメージが大きい刀以上に投げたときのダメージが大きな刀

    # について、ダメージが大きなものから投げていく。そのダメージの総和が

    # 敵の体力より大きければ投げて倒せばいいし、足りなければ刀を降って倒せばいい。

    # ただし、振る刀の投げダメージが振るより高ければ、投げる前に振らなければならないが、

    # 計算時には「投げてから振る」とみなしても問題ない。

    swing_damage_max = max([s[0] for s in Swords])

    throw_higher_than_swing = [s[1] for s in Swords if s[1] >= swing_damage_max]

    throw_higher_than_swing.sort(reverse=True)



    minimum_moving = 0

    for damage in throw_higher_than_swing:

        if H <= 0:  # 刀を投げている途中で敵を倒したら終わり

            H = 0

            break

        H -= damage

        minimum_moving += 1

    minimum_moving += math.ceil(H / swing_damage_max)

    return minimum_moving



N, H = [int(i) for i in input().split()]

Swords = [[int(i) for i in input().split()] for j in range(N)]

print((d_katana_thrower(N, H, Swords)))
def d_Katana_Thrower(N, H, S):
    import numpy
    import math

    swing = numpy.asarray([x[0] for x in S])
    throw = numpy.asarray([x[1] for x in S])
    swing_max = numpy.max(swing)
    throw_t = throw[throw >= swing_max]
    throw_t = sorted(throw_t, reverse=True)
    hp = H
    ans = 0
    for d in throw_t:
        if hp <= 0:
            break
        hp -= d
        ans += 1
    if hp > 0:
        ans += math.ceil(hp / swing_max)
    return ans


N, H = [int(i) for i in input().split()]
S = [[int(i) for i in input().split()] for j in range(N)]
print((d_Katana_Thrower(N, H, S)))

def d_katana_thrower(N, H, Swords):
    import math

    # 振ったとき最もダメージが大きい刀以上に投げたときのダメージが大きな刀
    # について、ダメージが大きなものから投げていく。そのダメージの総和が
    # 敵の体力より大きければ投げて倒せばいいし、足りなければ刀を降って倒せばいい。
    # ただし、振る刀の投げダメージが振るより高ければ、投げる前に振らなければならないが、
    # 計算時には「投げてから振る」とみなしても問題ない。
    swing_damage_max = max([s[0] for s in Swords])
    throw_higher_than_swing = [s[1] for s in Swords if s[1] >= swing_damage_max]
    throw_higher_than_swing.sort(reverse=True)
    minimum_moving = 0
    for damage in throw_higher_than_swing:
        if H <= 0:  # 刀を投げている途中で敵を倒したら終わり
            H = 0
            break
        H -= damage
        minimum_moving += 1
    minimum_moving += math.ceil(H / swing_damage_max)
    return minimum_moving


N, H = [int(i) for i in input().split()]
Swords = [[int(i) for i in input().split()] for j in range(N)]
print((d_katana_thrower(N, H, Swords)))

-def d_Katana_Thrower(N, H, S): -    import numpy +def d_katana_thrower(N, H, Swords): -    swing = numpy.asarray([x[0] for x in S]) -    throw = numpy.asarray([x[1] for x in S]) -    swing_max = numpy.max(swing) -    throw_t = throw[throw >= swing_max] -    throw_t = sorted(throw_t, reverse=True) -    hp = H -    ans = 0 -    for d in throw_t: -        if hp <= 0: +    # 振ったとき最もダメージが大きい刀以上に投げたときのダメージが大きな刀 +    # について、ダメージが大きなものから投げていく。そのダメージの総和が +    # 敵の体力より大きければ投げて倒せばいいし、足りなければ刀を降って倒せばいい。 +    # ただし、振る刀の投げダメージが振るより高ければ、投げる前に振らなければならないが、 +    # 計算時には「投げてから振る」とみなしても問題ない。 +    swing_damage_max = max([s[0] for s in Swords]) +    throw_higher_than_swing = [s[1] for s in Swords if s[1] >= swing_damage_max] +    throw_higher_than_swing.sort(reverse=True) +    minimum_moving = 0 +    for damage in throw_higher_than_swing: +        if H <= 0:  # 刀を投げている途中で敵を倒したら終わり +            H = 0 -        hp -= d -        ans += 1 -    if hp > 0: -        ans += math.ceil(hp / swing_max) -    return ans +        H -= damage +        minimum_moving += 1 +    minimum_moving += math.ceil(H / swing_damage_max) +    return minimum_moving -S = [[int(i) for i in input().split()] for j in range(N)] -print((d_Katana_Thrower(N, H, S))) +Swords = [[int(i) for i in input().split()] for j in range(N)] +print((d_katana_thrower(N, H, Swords)))