#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>

#define max(x, y)	(((x) > (y))? (x) : (y))
#define abs(x)		(((x) < 0)? (-1*(x)) : (x))

using namespace std;

int N,H;
struct data_t {
    int a;
    int b;
} ;

bool acmp( const data_t& left, const data_t& right ) {
    return left.a > right.a;
}
bool bcmp( const data_t& left, const data_t& right ) {
    return left.b > right.b;
}

int main() {
	int i,x=0;
	int a_max,b_max;
	
	cin >> N >> H;

	vector<data_t> dt(N);

	for ( i = 0; i < N; i++ ) {
		cin  >> dt[i].a >> dt[i].b; 
	}
	
	sort(dt.begin(), dt.end(), acmp);
	a_max = dt[0].a;
	
	while ( H  > 0 ) {
		sort(dt.begin(), dt.end(), bcmp);
		b_max = dt[0].b;
		if ( b_max > a_max ) {
			H -= b_max;
			dt[0].a = dt[0].b = 0;
		} else {
			H -= a_max;
		}
		x++;
		sort(dt.begin(), dt.end(), acmp);
		a_max = dt[0].a;
	}
	
	cout << x << endl;

	return 0;
}
