#include"bits/stdc++.h"
#define int long long
#define _overload3(_1,_2,_3,name,...) name
#define _rep(i,n) repi(i,0,n)
#define repi(i,a,b) for(int i=(a);i<(b);++i)
#define rep(...) _overload3(__VA_ARGS__,repi,_rep,)(__VA_ARGS__)
#define itr(i,x) for(auto i=(x).begin();i!=(x).end();++i)
#define All(x) (x).begin(),(x).end()
#define rAll(x) (x).rbegin(),(x).rend()
using namespace std;
typedef pair<int,int> P;
typedef vector<int> vi;
typedef vector<vi> vvi;
const int mod=1000000007;
int gcd(int x,int y){return y?gcd(y,x%y):x;}
int lcm(int x,int y){return x*y/gcd(x,y);}
int roundup(int a,int b){return	(a-1)/b+1;}
void YN(bool flg){cout<<(flg?"YES":"NO")<<endl;}
void Yn(bool flg){cout<<(flg?"Yes":"No")<<endl;}
void yn(bool flg){cout<<(flg?"yes":"no")<<endl;}
signed main(){
	int n,h;cin>>n>>h;
	vector<int> a(n),b(n);
	rep(i,n){
		cin>>a[i]>>b[i];
	}
	vector<int> orda(n),ordb(n);
	iota(All(orda),0);iota(All(ordb),0);
	sort(All(orda),[&](int x,int y){return a[x]>a[y];});
	sort(All(ordb),[&](int x,int y){return b[x]>b[y];});
	int ans=0,H=h;
	rep(i,){
		int at=b[ordb[i]];
		if(at>=a[orda[0]]&&ordb[i]!=orda[0]){ 
			h-=at;
			ans++;
		}
		if(h<=b[orda[0]]) h-=b[orda[0]],ans++;
		if(h<=0) break;
	}
	if(h>0){
		if(h<=b[orda[0]]) ans++;
		else{
			ans+=roundup(h-b[orda[0]],a[orda[0]])+1;
		}
	}
	cout<<ans<<endl;
}