#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long N, H;
  cin >> N >> H;
  vector<long long> a(N, 0LL), b(N, 0LL);
  for (int i = 0; i < (N); ++i) {
    cin >> a[i] >> b[i];
  }
  sort(a.begin(), a.end(), greater<long long>());
  sort(b.begin(), b.end(), greater<long long>());
  long long sumb = accumulate(b.begin(), b.end(), 0LL);
  long long res = 0;
  vector<long long>::iterator it = lower_bound(b.begin(), b.end(), H);
  res += N;
  res += (H - sumb + a[0] - 1LL) / a[0];
  for (int i = 0; i < (N); ++i) {
    b[i] += (i != 0 ? b[i - 1] : 0LL);
  }
  long long lo = 1LL;
  long long hi = (H + a[0]) / a[0];
  int iter = 0;
  while (lo < hi && iter < 50) {
    long long mid1 = (2LL * lo + hi) / 3LL;
    long long mid2 = (lo + 2LL * hi) / 3LL;
    int kb1 =
        (int)(lower_bound(b.begin(), b.end(), H - mid1 * a[0]) - b.begin());
    int kb2 =
        (int)(lower_bound(b.begin(), b.end(), H - mid2 * a[0]) - b.begin());
    if (mid1 + kb1 + 1LL < mid2 + kb2 + 1LL) {
      lo = mid1;
    } else {
      hi = mid2;
    }
    ++iter;
  }
  int kb = (int)(lower_bound(b.begin(), b.end(), H - lo * a[0]) - b.begin());
  res = min(res, lo + (long long)kb + 1LL);
  cout << res << endl;
  return 0;
}
