#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <numeric>
#include <utility>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <unordered_map>
using namespace std;

#define COUT(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl
#define EACH(i, s) for (__typeof__((s).begin()) i = (s).begin(); i != (s).end(); ++i)

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; }
template<class T1, class T2> ostream& operator << (ostream &s, pair<T1,T2> P)
{ return s << '<' << P.first << ", " << P.second << '>'; }
template<class T> ostream& operator << (ostream &s, vector<T> P)
{ for (int i = 0; i < P.size(); ++i) { if (i > 0) { s << " "; } s << P[i]; } return s; }
template<class T> ostream& operator << (ostream &s, vector<vector<T> > P)
{ for (int i = 0; i < P.size(); ++i) { s << endl << P[i]; } return s << endl; }
template<class T1, class T2> ostream& operator << (ostream &s, map<T1,T2> P)
{ EACH(it, P) { s << "<" << it->first << "->" << it->second << "> "; } return s << endl; }

int N;
long long H;
const int MAX = 110000;

typedef pair<long long,long long> pll;
pll inp[MAX];

long long sum[MAX];

int main() {
    while (cin >> N >> H) {
        for (int i = 0; i < N; ++i) {
            cin >> inp[i].second >> inp[i].first;
        }
        sort(inp, inp+N, greater<pll>());
        
        long long maxa = 0;
        sum[0] = 0;
        for (int i = 0; i < N; ++i) {
            //cout << i << ": " << inp[i] << endl;
            sum[i+1] = sum[i] + inp[i].first;
            chmax(maxa, inp[i].second);
        }
        //COUT(maxa);
        
        long long res = H;
        for (long long i = 0; i <= N; ++i) {
            long long rem = H - sum[i];
            if (rem < 0) {
                chmin(res, i);
                continue;
            }
            long long add = (rem + maxa - 1) / maxa;
            chmin(res, add + i);
            
            //cout << i << ": " << sum[i] << ", " << rem << ", " << add << endl;
        }
        cout << res << endl;
        
        
        /*
        maxa[0] = 0;
        for (int i = 0; i < N; ++i) {
            maxa[i+1] = max(maxa[i], inp[i].second);
        }

        long long res = H;
        
        long long sum = 0;
        for (int i = 0; i < N; ++i) {
            long long rem = H - sum;
            
            if (rem < 0) continue;
            long long add = 0;
            
            if (rem <= inp[N-i-1].first) add = 1;
            else {
                rem -= inp[N-i-1].first;
                add = (rem + maxa[N-i] - 1) / maxa[N-i] + 1;
            }
            sum += inp[N-i-1].first;
            
            
            COUT(i);
            COUT(rem);
            COUT(add);
            COUT(maxa[N-i]);
            
            
            chmin(res, add + i);
        }
        
        cout << res << endl;
         */
    }
}






Measured memory_bytes: 2560