#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T CHMAX(T& x, const T y) {
  return x = (x < y) ? y : x;
}
template <class T>
inline T CHMIN(T& x, const T y) {
  return x = (x > y) ? y : x;
}
using PII = pair<int, int>;
using PLL = pair<long long, long long>;
using LL = long long;
using ULL = unsigned long long;
template <class T>
using V = vector<T>;
template <class T>
using V2 = vector<vector<T>>;
template <class T, int W = 255>
using A = array<T, W>;
template <class T, int W = 255, int H = 255>
using A2 = array<array<T, W>, W>;
LL N, H;
V<PLL> v;
int main() {
  std::cin.tie(0);
  std::ios::sync_with_stdio(false);
  ;
  cin >> N;
  cin >> H;
  for (int i = 0; i < static_cast<int>(N); i++) {
    int a, b;
    cin >> a >> b;
    v.push_back(PII(b, a));
  }
  std::sort((v).begin(), (v).end());
  LL max_ai = v[0].second;
  LL max_bi = v[0].first;
  LL ai_idx = 0;
  for (int i = 1; i < N; i++) {
    if (max_ai < v[i].second) {
      ai_idx = i;
      max_ai = v[i].second;
      max_bi = v[i].first;
    } else if (max_ai == v[i].second && max_bi < v[i].first) {
      ai_idx = i;
      max_ai = v[i].second;
      max_bi = v[i].first;
    }
  }
  LL cnt = 0;
  for (int i = N - 1; i >= 0; i--) {
    if (H <= 0) break;
    if (i == ai_idx) continue;
    if (max_ai != v[i].second && max_ai < v[i].first) {
      H -= v[i].first;
      cnt++;
    }
  }
  for (int i = N - 1; i >= 0; i--) {
    if (H <= 0) break;
    if (max_ai == v[i].second && max_ai < v[i].first) {
      H -= v[i].first;
      cnt++;
    }
  }
  if (0 < H) cnt += (H + max_ai - 1) / max_ai;
  cout << cnt << "\n";
}
