class Katana(val at : Int, val th : Int)

fun ceilDiv(t : Int, d : Int) : Int{
    return if(t % d > 0) t / d + 1 else t / d
}

fun thrower(attacker : Katana, lKatana : MutableList<Katana>, h : Int, n : Int) : Pair<Int, Int>{
    var cnt = 0
    var hp = h
    for(i in 0..(n - 1)){
        if(hp <= attacker.th) return Pair(cnt, hp)
        if(lKatana[i].th <= attacker.at) return Pair(cnt, hp)
        hp -= lKatana[i].th
        cnt++
        if(hp <= 0) return Pair(cnt, hp)
    }
    return Pair(cnt, hp)
}

fun battle(attacker : Katana, lKatana : MutableList<Katana>, h : Int, n : Int) : Int{
    var (cnt, hp) = thrower(attacker, lKatana, h, n)
    if(hp <= 0) return cnt
    hp -= attacker.th
    cnt++
    if(hp <= 0) return cnt

    return cnt + ceilDiv(hp, attacker.at)
}

fun main(args: Array<String>){
    val (n, h) = readLine()!!.split(" ").map(String::toInt)

    val lKatana = mutableListOf<Katana>()
    for(i in 0..(n-1)){
        val (at, th) = readLine()!!.split(" ").map(String::toInt)
        lKatana.add(Katana(at, th))
    }

    lKatana.sortByDescending { it.at }
    val attacker = lKatana[0]
    lKatana.removeAt(0)

    lKatana.sortByDescending { it.th }
    println(battle(attacker, lKatana, h, n - 1))
}