#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> P;
typedef pair<ll,ll> l_l;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<P> vp;
#define fi first
#define se second
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define rrep(i,n) for(int i = 1; i <= (n); ++i)
#define drep(i,n) for(int i = (n)-1; i >= 0; --i)
const int INF=1001001000;
const int mINF=-1001001000;
const ll LINF=1010010010010010000;
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;
}
//グリッド：（典型）dp,dfs,bfs,最短経路,その他
int n,h;
vl a(110000),b(110000);
int main(){
    cin>>n>>h;
    rep(i,n)cin>>a[i]>>b[i];
    ll mx=0;
    int idx=-1;
    rep(i,n){
        if(chmax(mx,a[i])) idx=i;
    }
    vl thr;
    bool duplicate=false;
    rep(i,n){
        if(b[i]>mx){
            if(i==idx) duplicate=true;
            thr.push_back(b[i]);
    }
    ll sum=0;
    sort(thr.rbegin(),thr.rend());
    rep(i,(int)thr.size()){
        sum+=thr[i];
        if(sum>=h){
            cout<<i+1<<endl;
            return 0;
        }
    }
    ll cnt=0;
    cnt+=(int)thr.size();
    if(duplicate) {
        sum-=b[idx];
        ll need=h-sum;
        cnt+=(need-b[idx]+mx-1)/mx;
        cout<<cnt<<endl;
    }
    else{
        ll need=h-sum;
        cnt+=(need+mx-1)/mx;
        cout<<cnt<<endl;
    }
    return 0;
    //cout << sum <<" "<<mx<< endl;
}