#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
};
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
};
class SORD {
 public:
  int a, b;
  SORD(int a = 0, int b = 0) : a(a), b(b){};
  bool operator<(const SORD &s) const {
    if (a == s.a) {
      return b < s.b;
    } else {
      return a < s.a;
    }
  }
};
int main() {
  int N, H;
  cin >> N >> H;
  int h = H;
  vector<SORD> sords(N);
  int a, b;
  int ma = 0;
  int mb = 0;
  for (int i = (int)0; i < (int)N; i++) {
    cin >> a >> b;
    sords[i] = SORD(a, b);
    ma = max(ma, a);
    mb = max(mb, b);
  }
  if (ma >= h || mb >= h) {
    cout << 1 << endl;
    return 0;
  }
  sort(sords.begin(), sords.end());
  reverse(sords.begin(), sords.end());
  auto masord = sords[0];
  int ans = 0;
  for (int i = (int)1; i < (int)N; i++) {
    auto sord = sords[i];
    if (sord.b > masord.a) {
      ans += 1;
      H -= sord.b;
      if (H <= 0) {
        cout << ans << endl;
        return 0;
      }
    }
  }
  ans += 1;
  H -= masord.b;
  if (H <= 0) {
    cout << ans << endl;
    return 0;
  } else {
    ans += (H + masord.a - 1) / masord.a;
    cout << ans << endl;
    return 0;
  }
  return 0;
};
