#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<numeric>
#include<utility>

#define reps(i, j, k) for (int i = (j); i < (k); i++)
#define rep(i, j) reps(i, 0, j)

using namespace std;

using ll = long long;
using pii = pair<int, int>;
using vi = vector<int>;

const int mod = 1e9 + 7;
const long double pi = 3.141592653589793238462643383279502884197;
const long double eps = 1e-7;

int N, H;
ll num = 0;
vector<pii> ab;
bool bFinish = false;

int main() {
	cin >> N >> H;
	rep(i, N) {
		int a, b;
		cin >> a >> b;
		ab.push_back(pii(a, b));
	}

	sort(ab.begin(), ab.end(), [](const pii x, const pii y) { return x.second > y.second; });
	pii max_ab = *max_element(ab.begin(), ab.end(), [](const pii x, const pii y) { if (x.first == y.first) { return x.second > y.second; } else { return x.first < y.first; }});

	rep(i, ab.size() {
		if (max_ab.first < ab[i].second) {
			if (max_ab == ab[i]) {
				if (H < max_ab.second) {
					H -= max_ab.second;
					num++;
				}
				break;
			}
			else {
				H -= ab[i].second;
				ab.erase(ab.begin() + i);
				num++;
			}
		}
		else { break; }
	}

	if (H > 0) {
		H -= max_ab.second;
		num++;

		if (H > 0) {
			int n = H / max_ab.first;

			if (n == 0) num += 1;
			else {
				H -= max_ab.first * n;
				if (H > 0) num += n + 1;
				else num += n;
			}
		}
	}

	cout << num << endl;

	//system("pause");
	return 0;
}