fun main(args: Array<String>) {
    abc085d()
}

private data class Sword(val swing: Long, val throwing: Long)

fun abc085d() {
    val (n, hp) = readLine()!!.split(" ").map { it.toLong() }
    val swords = (1..n).map { readLine()!!.split(" ").map { it.toLong() } }
        .map { Sword(it[0], it[1]) }

    // 最大振り攻撃ダメージより大きい刀は最後に確定で投げるようにする
    val maxSwingDamage = swords.maxBy { it.swing }!!.swing
    val throwingAttacks = swords.filter { it.throwing >= maxSwingDamage }
        .sortedByDescending { it.throwing }

    var hpLeft = hp
    var attackCount = 0L
    for (throwingAttack in throwingAttacks) {
        if (hpLeft <= 0) break
        attackCount++
        hpLeft -= throwingAttack.throwing
    }

    // 最大振り攻撃ダメージの刀で残りを削る
    if (hpLeft > 0) attackCount += Math.ceil(hpLeft.toDouble() / maxSwingDamage.toDouble()).toLong()

    println(attackCount)
}
