#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long long unsigned int llui;
typedef long long int lli;
typedef long double float64;
typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;
typedef vector< vector<int> > vvi;

#define INF 1000000000
#define MOD 1000000007
#define EPS 1e-9
#define DEBUG(x) cout<< '>' << #x << ':' << x << "\n";
#define all(x) (x).begin(), (x).end()
#define SORT(x) sort((x).begin(),(x).end())
#define UNIQUE(x) (x).erase(unique((x).begin(),(x).end()),(x).end())
#define tr(container, it) \
    for(typeof(container.begin()) it = container.begin(); it != container.end(); it++) 


// #define sz(a) int((a).size())
// #define pb push_back
// #define fill(a,v) memset(a,v,sizeof a)


#define trace(x) cout << '>' << #x << ':' << x << endl;
#define trace2(x,y) cout<< '>' << #x << ':' << x << " | " << #y << ':' << y << endl;

#define trace3(x,y,z) cout<< '>' << #x << ':' << x \
        << " | " << #y << ':' << y <<" | " << #z << ':' << z << endl;

#define trace4(x,y,z,w) cout<< '>' << #x << ':' << x \
    << " | " << #y << ':' << y <<" | " << #z << ':' << z << " | " << #w << ':' << w << endl;



inline int two(int n) { return 1 << n; }
inline int test(int n, int b) { return (n>>b)&1; }
inline void set_bit(int & n, int b) { n |= two(b); }
inline void unset_bit(int & n, int b) { n &= ~two(b); }
inline int last_bit(int n) { return n & (-n); }
inline int ones(int n) { int res = 0; while(n && ++res) n-=n&(-n); return res; }

#define LSOne(S) (S&(-S))

const double pi = acos(-1);


template<class T> inline T gcd(T a,T b) //NOTES:__gcd(0,0) gives exception
  {if(a<0)return gcd(-a,b);if(b<0)return gcd(a,-b);return (b==0)?a:gcd(b,a%b);}

int cmp(double x, double y = 0, double tol = EPS) {
    return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1;
}

/////////////////////////////////////////////////////////////////////

bool sortby(const pair<ll,ll> &a,const pair<ll,ll> &b)
{
    return (a.second < b.second);
}

const int MAX_N = 4123;

int arr[MAX_N];
 
int main() {
	int N;
	ll H;
	scanf("%d %lld",&N,&H);
	ll a,b,ma=0,mb=LLONG_MAX;
	vector<pair<ll,ll> > V;
	V.push_back(0,0);
	for(int i=0;i<N;i++){
		scanf("%lld %lld",&a,&b);
		V.push_back(make_pair(a,b));
		if(a>ma){
			ma=a;mb=b;
		}
		else if(a==ma && b<mb){
			mb=b;
		}
	}
	/*for(int i=0;i<N;i++){
		if(V[i].first==ma && V[i].second==mb){
			V[i]=make_pair(0,0);
			break;
		}
	}*/
	sort(V.begin(),V.end(),sortby);
	ll ans=0;
	int j=N-1;
	while(H>0 && V[j].second>ma){
		H-=V[j].second;
		ans++;
		j--;
	}
	if(H>0){
		ans+=max((H-1)/ma+1,0LL);
	}
	printf("%lld\n",ans);
	return 0;
}
