#include <bits/stdc++.h>
using namespace std;
inline bool chkmin(int &a, int b) { return b < a ? a = b, 1 : 0; }
inline bool chkmax(int &a, int b) { return b > a ? a = b, 1 : 0; }
inline int read() {
  int x = 0, fh = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') fh = -1;
  for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ '0');
  return x * fh;
}
const int N = 100100;
long long sum, maxa;
long long once[N];
long long a[N], b[N];
bool cmp(int a, int b) { return a > b; }
int main() {
  long long n = read(), h = read();
  for (register int i = (1), _end_ = (int)(n); i <= _end_; ++i) {
    a[i] = read();
    b[i] = read();
    once[i] = max(a[i], b[i]);
    maxa = max(maxa, (long long)a[i]);
  }
  sort(once + 1, once + 1 + n, cmp);
  long long big = 0, tot = 0;
  for (register int i = (1), _end_ = (int)(n); i <= _end_; ++i)
    if (once[i] >= maxa) {
      big += once[i];
      tot = i;
    } else
      break;
  if (big >= h) return printf("%lld\n", tot), 0;
  long long res = (h - big) / maxa + (((h - big) % maxa) ? 1 : 0);
  h -= res * maxa;
  for (register int i = (1), _end_ = (int)(tot); i <= _end_; ++i) {
    h -= once[i];
    ++res;
    if (h <= 0) break;
  }
  printf("%lld\n", res);
  return 0;
}
