#include <bits/stdc++.h>
using namespace std;
using P = pair<long long, long long>;
using Graph = vector<vector<long long>>;
using ll = long long;
double pi = 3.14159265359;
void output_tate(vector<long long> s) {
  long long n = s.size();
  for (long long i = 0; i < n; i++) {
    cout << s[i] << endl;
  }
}
void output_yoko(vector<long long> s) {
  long long n = s.size();
  for (long long i = 0; i < n; i++) {
    if (i != 0) cout << " ";
    cout << s[i];
  }
  cout << endl;
}
long long MOD = pow(10, 9) + 7;
long long kaijou(long long n) {
  if (n == 0)
    return 1;
  else {
    return ((n % MOD) * (kaijou(n - 1) % MOD)) % MOD;
  }
}
bool ispow(long long n) {
  long long rn = sqrt(n);
  if (rn * rn == n)
    return true;
  else
    return false;
}
signed main() {
  long long n, h;
  cin >> n >> h;
  long long ans = 0;
  vector<pair<long long, long long>> ab(n), ba(n);
  vector<long long> b(n);
  for (long long i = 0; i < n; i++) {
    long long ai, bi;
    cin >> ai >> bi;
    ab[i] = make_pair(ai, bi);
    b[i] = bi;
  }
  sort((ab).begin(), (ab).end());
  sort((b).begin(), (b).end());
  long long a_max = ab.at(n - 1).first;
  long long throw_index =
      distance(b.begin(), upper_bound((b).begin(), (b).end(), a_max));
  for (long long i = n - 1; i >= throw_index; i--) {
    h -= b.at(i);
    ans++;
    if (h < 0) {
      cout << ans << endl;
      return 0;
    }
  }
  long long a_cnt = h / a_max;
  if ((h % a_max) != 0) a_cnt++;
  ans += a_cnt;
  cout << ans << endl;
}
