#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int inf = (1 << 21);
const long long INF = 1LL << 60;
using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
using vd = vector<double>;
using vb = vector<bool>;
using vl = vector<ll>;
using vs = vector<string>;
using vvi = vector<vector<int>>;
using vvl = vector<vector<ll>>;
using vvb = vector<vector<bool>>;
using vii = vector<pair<int, int>>;
using vll = vector<pair<ll, ll>>;
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
T GCD(T a, T b) {
  if (b == 0)
    return a;
  else
    return GCD(b, a % b);
}
template <class T>
T LCM(T a, T b) {
  return a / GCD(a, b) * b;
}
constexpr array<int, 9> dx = {0, 1, 0, -1, -1, 1, 1, -1, 0};
constexpr array<int, 9> dy = {1, 0, -1, 0, 1, 1, -1, -1, 0};
int main() {
  ll n, h;
  cin >> n >> h;
  ll mx = 0;
  ll hoge;
  ll idx;
  vll p(n);
  for (int i = 0; i < (n); i++) {
    cin >> p[i].first >> p[i].second;
    if (p[i].first > mx) {
      mx = p[i].first;
      hoge = p[i].second;
      idx = i;
    }
  }
  ll cnt = 0;
  for (int i = 0; i < (n); i++) {
    if (idx == i)
      continue;
    else if (p[i].second >= mx) {
      h -= p[i].second;
      cnt++;
      if (h <= 0) {
        cout << cnt << endl;
        return 0;
      }
    }
  }
  h -= hoge;
  cnt++;
  if (h <= 0) {
    cout << cnt << endl;
    return 0;
  }
  cout << cnt + (ll)ceil((double)h / mx) << endl;
}
