#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <boost/multi_array.hpp>

int main() {
    int N, H;
    std::cin >> N >> H;
    
    std::vector<std::vector<long long>> arr;
    std::priority_queue<long long> que;
    
    //取る行動は最もaの大きい剣を振るか、最もbの大きい剣を投げるか
    //投げるのは最後にまとめて投げていけば良い
    //全て投げた場合のダメージ合計をメモしておき、全て投げれば倒せる状態になったら投げる選択肢を考えれば良い
    
    long long maxa = 0, sumth = 0;
    
    for (int i = 0; i < N; i++) {
        long long a, b;
        std::cin >> a >> b;
        arr.push_back({a, b});
        maxa = std::max(maxa, a);
    }
    //投げても切る最大を超えられない武器は不要なのでそもそも記録しなくていい
    for (int i = 0; i < N; i++) {
        long long b;
        b = arr[i][1];
        if (maxa < b) {
            sumth += b;
            que.push(b);
        }
    }
    //この段階で、投げる攻撃は切るより効率的なので、切り終えたら全て投げていけば良い
    long long ans = 0;
    ans = (H - sumth) / maxa;
    long long h = H - maxa * ans;
    while (h > 0) {
        h -= que.top();
        que.pop();
        ans += 1;
    }

    std::cout << ans << std::endl;
    return 0;
}
