#include <bits/stdc++.h>
using namespace std;
bool bysecond(const vector<long long>& lhs, const vector<long long>& rhs) {
  if (lhs[1] != rhs[1]) {
    return lhs[1] > rhs[1];
  } else {
    return lhs[0] > rhs[0];
  }
}
bool byfirst(const vector<long long>& lhs, const vector<long long>& rhs) {
  if (lhs[0] != rhs[0]) {
    return lhs[0] > rhs[0];
  } else {
    return lhs[1] > rhs[1];
  }
}
signed main() {
  long long N, H;
  cin >> N >> H;
  vector<vector<long long>> vec(N, vector<long long>(2));
  for (long long i = 0; i < (long long)(N); i++) {
    cin >> vec[i][0] >> vec[i][1];
  }
  sort((vec).begin(), (vec).end(), byfirst);
  vector<long long> maxA = vec[0];
  vec.erase(vec.begin());
  sort((vec).begin(), (vec).end(), bysecond);
  long long index_for_vec = 0;
  long long turn = 0;
  long long curr = 0;
  if (vec.size() != 0) {
    while (H - curr > maxA[1]) {
      if (vec[index_for_vec][1] > maxA[0] && index_for_vec != vec.size()) {
        curr += vec[index_for_vec][1];
        index_for_vec++;
        turn++;
        if (index_for_vec == vec.size()) goto elseblock;
      } else {
      elseblock:
        turn += (H - curr - maxA[1]) / maxA[0];
        curr += maxA[0] * ((H - curr - maxA[1]) / maxA[0]);
        if ((H - curr - maxA[1]) % maxA[0] != 0) {
          turn++;
          curr += maxA[0];
        }
        break;
      }
    }
    if (curr < H) {
      turn++;
    }
  } else {
    turn++;
    H -= maxA[1];
    turn += H / maxA[0];
    if (H % maxA[0] != 0) turn++;
  }
  cout << turn << endl;
}
