n, h = gets.strip.split.map(&:to_i)
as = []
bs = []

n.times do
    a, b = gets.strip.split.map(&:to_i)
    as << a
    bs << b
end

# 最強の振るいの攻撃力
max_furui = as.max

# 投げの合計攻撃力
total_throw = bs.sum

# 振るう回数で二分探索
right = h / max_furui + 1
left = 0
while true do
    if right == left + 1
        break
    end
    puts "(left, right) = (#{left}, #{right})"
    # right 回で倒せるか？
    # 残りのボスのHP
    rest = h - max_furui * right
    # これを投げで削るから、
    mid = (right + left) / 2
    if rest <= total_throw
        # 倒せる
        right = mid - 1
    else
        # 倒せない
        left = mid + 1
    end
end

# ここで right に最小振るい回数が入っている
# 何回投げるか？
rest = h - max_furui * left
# これを投げで削っていく
# 投げの弱い順にソート
sorted_bs = bs.sort

count = 0
while rest > 0 do
    count += 1
    rest -= sorted_bs.pop
end

# 最小攻撃回数が求まった
puts right + count