use std::cmp::max;


fn main() {
    let (n, mut h) = read_tuple::<i64>();
    let mut katanas = Vec::new();
    let mut max_a = 0;
    for _ in 0..n {
        let (a, b) = read_tuple::<i64>();
        max_a = max(max_a, a);
        katanas.push((a, b));
    }
    katanas.sort_by_key(|&(_, b)| b);
    katanas.reverse();

    let mut count = 0;
    for &(_, b) in katanas.iter().filter(|&&(_, b)| max_a < b) {
        h -= b;
        count += 1;
        if h < 0 {
            break;
        }
    }
    let rem = if h > 0 {
        h / max_a + if h % max_a != 0 { 1 } else { 0 }
    } else {
        0
    };
    println!("{:?}", count + rem);
}
fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().split_whitespace()
        .map(|e| e.parse().ok().unwrap()).collect()
}
fn read_tuple<T: std::str::FromStr + Copy>() -> (T, T) {
    let temp = read_vec();
    (temp[0], temp[1])
}

