#include <bits/stdc++.h>
using namespace std;
using P = pair<long long, long long>;
using T = tuple<long, long, long>;
long long MOD = 1000000007;
long long dp[100005][4];
bool compare_by_second(pair<int, int> a, pair<int, int> b) {
  if (a.second != b.second) {
    return a.second < b.second;
  } else {
    return a.first < b.first;
  }
}
int main() {
  long long N, H;
  cin >> N >> H;
  vector<P> ab(N);
  long long aMax = -100;
  long long bSum = 0;
  for (int i = 0; i < N; ++i) {
    cin >> ab[i].first >> ab[i].second;
    aMax = max(aMax, ab[i].first);
    bSum += ab[i].second;
  }
  sort(ab.begin(), ab.end(), compare_by_second);
  if (H <= bSum) {
    long long h = H;
    for (int i = N - 1; 0 <= i; --i) {
      h -= ab[i].second;
      if (h <= 0) {
        cout << N - i << endl;
        return 0;
      }
    }
  }
  long long nageruKazu = 0;
  long long nageruSum = 0;
  for (int i = N - 1; 0 <= i; --i) {
    if (aMax <= ab[i].second) {
      nageruKazu++;
      nageruSum += ab[i].second;
    } else
      break;
  }
  long long h = H;
  h -= nageruSum;
  long long ans = nageruKazu + (h + (aMax - 1)) / aMax;
  cout << ans << endl;
}
