#include <bits/stdc++.h>
using namespace std;
int gcd(int m, int n) {
  if ((0 == m) || (0 == n)) return 0;
  while (m != n) {
    if (m > n)
      m = m - n;
    else
      n = n - m;
  }
  return m;
}
int lcm(int m, int n) {
  if ((0 == m) || (0 == n)) return 0;
  return ((m / gcd(m, n)) * n);
}
int input() {
  int x;
  cin >> x;
  return x;
}
int abs(int x) {
  if (x >= 0) {
    return x;
  } else {
    return -x;
  }
}
int moji(char in) {
  int ans = (int)in - (int)'a' + 1;
  if ((in < 1) || (in > 26)) {
    ans = 100;
  }
  return ans;
}
const int VV = 10;
int cost[VV][VV];
int d[VV];
bool used[VV];
void dijkstra(int s) {
  fill(d, d + VV, 100000);
  fill(used, used + VV, false);
  d[s] = 0;
  while (true) {
    int v = -1;
    for (int u = 0; u < VV; u++) {
      if (!used[u] && (v == -1 || d[u] < d[v])) v = u;
    }
    if (v == -1) break;
    used[v] = true;
    for (int u = 0; u < VV; u++) {
      d[u] = min(d[u], d[v] + cost[v][u]);
    }
  }
}
int compare_int(const void *a, const void *b) { return *(int *)a - *(int *)b; }
int main() {
  int N, H;
  cin >> N >> H;
  int a[N];
  int b[N];
  int maxa = -100;
  int maxb = -100;
  int maxidx = 0;
  int sum = 0;
  for (int i = 0; i < N; i++) {
    a[i] = 0;
    b[i] = 0;
  }
  for (int i = 0; i < N; i++) {
    cin >> a[i] >> b[i];
    if (a[i] > maxa) {
      maxa = a[i];
      maxb = b[i];
      maxidx = i;
    }
    if (a[i] == maxa) {
      if (b[maxidx] < b[i]) {
        maxidx = i;
        maxb = b[i];
      }
    }
  }
  int c[N - 1];
  int x = 0;
  for (int i = 0; i < N; i++) {
    if (i == maxidx) {
      continue;
    }
    c[x] = b[i];
    x++;
  }
  sort(c, c + N - 1);
  bool ok = true;
  for (int i = N - 2; i >= 0; i--) {
    if (c[i] > maxa) {
      H -= c[i];
      sum++;
    }
    if (H < 0) {
      cout << sum << endl;
      return 0;
    }
  }
  while (true) {
    if (H - b[maxidx] <= 0) {
      sum++;
      break;
    }
    H -= maxa;
    sum++;
  }
  cout << sum << endl;
}
