#include <bits/stdc++.h>

using namespace std;

#define rep(i, n) for(int i = 0; i < n; i++)
#define inv(n, a) for(int i = 0; i < n; i++) cin >> a[i]
#define MOD 1000000007
#define INF 1e7
#define LINF 1e15
typedef long long ll;
typedef long double ld;
using Graph = vector<vector<int>>;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
// 'a' = 97 'z' = 122 => 'a' = 0 'z' = 25

int main() {
    ll n, h; cin >> n >> h;
    vector<pair<ll, ll>> P(n);
    pair<ll, ll> ma = make_pair(0, 0);
    rep(i, n){
        int a, b; cin >> a >> b;
        P[i] = make_pair(a, b);
        if(ma.first < a) ma = make_pair(a, b);
    }
    sort(P.begin(), P.end(), [](const auto& a, const auto& b){return a.second > b.second;});

    ll dm = 0;
    bool f = false;
    ll ans = 0;
    rep(i, n){
        if(ma.first == P[i].first && ma.second == P[i].second && !f){
            f = true;
            continue;
            // 斬りつけに使うのでいったんスキップ
        }
        if(P[i].second < ma.first){
            break;
            // 斬りつけに使う刀の斬りつけダメージより投擲ダメージが小さい刀は使用しない
        }
        dm += P[i].second;
        ans++;
        if(dm >= h){
            cout << ans << endl;
            return 0;
        }
    }
    ans += ceil((double)(h - dm - ma.second) / ma.first);
    dm += ceil((double)(h - dm - ma.second) / ma.first) * ma.first;
    if(dm < h) ans++;
    cout << ans << endl;
}