#include <bits/stdc++.h>
using namespace std;
static const long long INF = 1ll << 60;
static const long long dx[] = {
    1,
    -1,
    0,
    0,
};
static const long long dy[] = {0, 0, 1, -1};
static const long long mod = 1000000007;
long long N, H;
vector<pair<long long, long long> > Katana;
long long maxSwingPower;
long long throwPower[100005];
long long AttackCount(long long n) {
  long long h = H - n * maxSwingPower;
  long long it = upper_bound(throwPower, throwPower + N, h) - throwPower;
  if (throwPower[it - 1] == h) it--;
  if (h <= 0)
    return n;
  else if (h - throwPower[it] > 0)
    return INF;
  else
    return n + it;
}
long long a[100005];
long long b[100005];
signed main() {
  cin >> N >> H;
  for (long long i = 0; i < N; ++i) {
    long long s, t;
    cin >> s >> t;
    Katana.push_back(pair<long long, long long>(t, s));
    maxSwingPower = max(s, maxSwingPower);
    a[i] = s;
    b[i] = t;
  }
  sort(b, b + N);
  sort(Katana.begin(), Katana.end(), greater<pair<long long, long long> >());
  for (long long i = 1; i <= N; ++i) {
    throwPower[i] = throwPower[i - 1] + Katana[i - 1].first;
  }
  long long it = lower_bound(b, b + N, maxSwingPower) - b;
  if (it == N) {
    cout << 1 / 0 << endl;
    return 0;
  }
  long long h = H - throwPower[N - it];
  long long p = h / maxSwingPower;
  if (maxSwingPower * p < h) p++;
  cout << p + N - it << endl;
}
