#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
using vl = vector<ll>;
using vvl = vector<vl>;
using vs = vector<string>;
const ll MOD = 1000000007;
const ll MAX = (ll)0x3f0000003f000000;
const double EPS = 1e-9;
const int dx[] = {0, 1, 0, -1, 1, -1, 1, -1},
          dy[] = {1, 0, -1, 0, 1, -1, -1, 1};
inline bool in(string s, string c) { return (s.find(c) != string::npos); }
inline bool in(string s, char c) { return (s.find(c) != string::npos); }
template <class T>
void print(T& x) {
  cout << x << '\n';
}
struct setup_main {
  setup_main() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    cout << fixed << setprecision(15);
  }
} setup_main_;
ll ans = 0;
void solve(long long N, long long H, std::vector<long long> a,
           std::vector<long long> b) {
  ll A = 0;
  for (auto&& i : a) {
    A = max(A, i);
  }
  std::sort(begin(b), end(b), greater<ll>());
  for (auto&& bi : b) {
    if (bi > A) {
      H -= bi;
      ans++;
      if (H < 0) return;
    }
  }
  ans += (H + A - 1) / A;
  return;
}
signed main() {
  long long N;
  scanf("%lld", &N);
  long long H;
  scanf("%lld", &H);
  std::vector<long long> a(N);
  std::vector<long long> b(N);
  for (int i = 0; i < N; i++) {
    scanf("%lld", &a[i]);
    scanf("%lld", &b[i]);
  }
  solve(N, H, std::move(a), std::move(b));
  print(ans);
  return 0;
}
