#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chmax(T &a, T b)
{
    if (a < b)
    {
        a = b;
        return 1;
    }
    return 0;
}
template <class T>
inline bool chmin(T &a, T b)
{
    if (a > b)
    {
        a = b;
        return 1;
    }
    return 0;
}
typedef long long int ll;

#define EPS (1e-7)
#define INF (1e9)
#define LLINF (1e18)
#define PI (acos(-1))
#define MOD (1000000007)
#define ALL(v) (v).begin(), (v).end()
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

//-------------------------------------

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    ll n, h;
    cin >> n >> h;
    vector<pair<ll, ll>> ab(n); // fi:a_i, se: b_is
    for (ll i = 0; i < n; i++)
    {
        cin >> ab[i].first >> ab[i].second;
    }
    sort(ALL(ab), [](const auto &a, const auto &b) { return a.first < b.first; });
    ll a_mx = ab[n - 1].first; // aの最大値
    sort(ALL(ab), [](const auto &a, const auto &b) { return a.second < b.second; });
    ll ok = n;
    ll ng = -1;
    // aの最大値より大きいなかで、最も最小のbを二分探索
    while (llabs(ok - ng) > 1)
    {
        ll mid = (ok + ng) / 2;
        if (a_mx <= ab[mid].second)
        {
            ok = mid;
        }
        else
        {
            ng = mid;
        }
    }
    // cout << "dbg:" << ok << endl;
    ll ans = 0;
    for (ll i = n - 1; i >= ok; i--)
    {
        h -= ab[i].second;
        ans++;
        if (h < 0)
        {
            cout << ans << endl;
            return 0;
        }
    }

    ans += h / a_mx;
    if (h % a_mx != 0)
    {
        ans++;
    }
    cout << ans << endl;
}