#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
const long long MOD = 1E+09 + 7;
const long long INF = 1E09 + 1;
const int MAX_N = 1E+05;
int N;
long long H;
long long A[MAX_N + 1], B[MAX_N + 1];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N >> H;
  long long amax = 0;
  long long bmin = INF;
  long long bsum = 0;
  for (int i = 1; i <= N; i++) {
    cin >> A[i] >> B[i];
    amax = max(amax, A[i]);
    bmin = min(bmin, B[i]);
    bsum += B[i];
  }
  long long ans;
  if (amax < bmin && bsum < H) {
    ans = N;
    long long atn = INF;
    long long rh = H - bsum;
    for (int i = 1; i <= N; i++) {
      atn = min(atn, (long long)ceil(double(rh) / A[i]));
    }
    ans += atn;
  } else {
    long long atn = 0;
    long long ats = 0;
    sort(B + 1, B + N + 1, greater<long long>());
    for (int i = 1; i <= N; i++) {
      if (B[i] <= amax) break;
      ats += B[i];
      atn++;
    }
    ans = atn + ceil(double(max(0LL, H - ats)) / amax);
  }
  cout << ans << "\n";
  return 0;
}
