
#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>

using namespace std;
using ll = long long;

struct C {
    ll H_{};
    vector<ll> a_{};
    vector<ll> b_{};
    explicit C(ll H, vector<pair<ll, ll>> v) : H_(H) {
        for (auto&& p : v) {
            a_.emplace_back(p.first);
            b_.emplace_back(p.second);
        }
    }
    ll resolve() {
        ll N = a_.size();
        sort(a_.begin(), a_.end());
        sort(b_.begin(), b_.end());
        ll maxA = a_[N-1];
        b_.erase(remove_if(b_.begin(), b_.end(), [&maxA](auto x) { return x < maxA ;}), b_.end());
        ll count = 0;
        for(auto x : b_) {
            H_ -= x;
            count++;
            if (H_ <= 0) {
                break;
            }
        }
        if (H_ > 0) {
            count += (H_ + maxA - 1) / maxA;
        }
        return count;
    }
};

int main() {
    ll N, H;
    cin >> N >> H ;
    vector<pair<ll, ll>> v{};
    for (int i=0; i < N; ++i) {
        ll a, b;
        cin >> a >> b;
        v.emplace_back(make_pair(a, b));
    }
    C c{H, move(v)};
    cout << c.resolve() << endl;
    return 0;
}
