#include <bits/stdc++.h>
using namespace std;
inline int two(int n) { return 1 << n; }
inline int test(int n, int b) { return (n >> b) & 1; }
inline void set_bit(int &n, int b) { n |= two(b); }
inline void unset_bit(int &n, int b) { n &= ~two(b); }
inline int last_bit(int n) { return n & (-n); }
inline int ones(int n) {
  int res = 0;
  while (n && ++res) n -= n & (-n);
  return res;
}
const double pi = acos(-1);
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
int cmp(double x, double y = 0, double tol = 1e-9) {
  return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1;
}
bool sortby(const pair<long long, long long> &a,
            const pair<long long, long long> &b) {
  return (a.second < b.second);
}
const int MAX_N = 4123;
int arr[MAX_N];
int main() {
  int N;
  long long H;
  scanf("%d %lld", &N, &H);
  long long a, b, ma = 0, mb = LLONG_MAX;
  vector<pair<long long, long long> > V;
  for (int i = 0; i < N; i++) {
    scanf("%lld %lld", &a, &b);
    V.push_back(make_pair(a, b));
    if (a > ma) {
      ma = a;
      mb = b;
    } else if (a == ma && b < mb) {
      mb = b;
    }
  }
  sort(V.begin(), V.end(), sortby);
  long long ans = 0;
  int j = N - 1;
  while (H > 0 && V[j].second > ma) {
    H -= V[j].second;
    ans++;
    j--;
  }
  if (H > 0) {
    ans += max((H - 1) / ma + 1, 0LL);
  }
  printf("%lld\n", ans);
  return 0;
}
