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

fun battle(attacker : Int, lThrow : MutableList<Int>, h : Int, n : Int) : Int{
    var cnt = 0
    var hp = h
    for(i in 0..(n - 1)){
        if(attacker > lThrow[i]) break
        hp -= lThrow[i]
        cnt++
        if(hp <= 0) break
    }
    if(hp <= 0) return cnt

    return cnt + ceilDiv(hp, attacker)
}

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

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

    lAttack.sortDescending()
    val attacker = lAttack[0]

    lThrow.sortDescending()
    println(battle(attacker, lThrow, h, n))
}