#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W,
    X, Y, Z;
struct katana {
  long long s;
  long long t;
  int i;
};
bool comps(const katana &left, const katana &right) {
  if (left.s == right.s) {
    return left.t > right.t;
  }
  return left.s > right.s;
}
bool compt(const katana &left, const katana &right) {
  if (left.t == right.t) {
    return left.s > right.s;
  }
  return left.t > right.t;
}
void KatanaThrower() {
  cin >> N >> H;
  katana k[100010];
  katana so[100010];
  for (size_t i = 0; i < N; i++) {
    cin >> k[i].s >> k[i].t;
    k[i].i = i;
    so[i] = k[i];
  }
  sort(k, k + N, compt);
  sort(so, so + N, comps);
  bool use[100010];
  fill(use, use + N, false);
  int res = (int)10e9 + 10;
  long long sumD = 0;
  int soi = 0;
  for (int i = 0; i < N; i++) {
    for (; soi < N; soi++) {
      if (!use[so[soi].i]) break;
    }
    int sc = (H - (sumD + k[i].t)) / so[soi].s;
    sc++;
    int rem = (H - (sumD + k[i].t)) % so[soi].s;
    if (rem > 0) {
      rem -= so[soi].s;
      sc++;
    }
    res = min(res, sc + i);
    sumD += k[i].t;
    use[k[i].i];
  }
  cout << res << endl;
}
int main() {
  KatanaThrower();
  return 0;
}
