#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
inline long long GCD(long long a, long long b) { return b ? GCD(b, a % b) : a; }
inline long long lcm(long long a, long long b) { return a * b / GCD(a, b); }
using Edge = pair<int, long long>;
using Graph = vector<vector<bool>>;
using Edge = pair<int, long long>;
const int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int main() {
  long long n, h;
  cin >> n >> h;
  vector<long long> a(n), b(n);
  for (long long i = 0; i < (long long)n; i++) cin >> a[i] >> b[i];
  long long amax = 0;
  long long ans = 0;
  for (long long i = 0; i < (long long)n; i++) amax = max(amax, a[i]);
  sort((b).begin(), (b).end(), greater<long long>());
  long long i = 0;
  while (h > 0 && b[i] > amax) {
    h -= b[i];
    ans++;
    i++;
  }
  ans += (h + amax - 1) / amax;
  cout << ans << endl;
}
