#include <bits/stdc++.h>
using namespace std;
using str = string;
template <class T>
using vec = vector<T>;
template <class T>
using vvec = vec<vec<T>>;
template <class T>
using que = queue<T>;
template <class T>
using pque = priority_queue<T>;
template <class... T>
using tup = tuple<T...>;
using vint = vec<long long>;
using vvint = vvec<long long>;
using vstr = vec<str>;
using pint = pair<long long, long long>;
using vp = vec<pint>;
using tll = tup<long long, long long, long long>;
using vt = vec<tll>;
using mint = map<long long, long long>;
using dict = map<str, long long>;
using qint = que<long long>;
using qp = que<pint>;
using pqint = pque<long long>;
using pqp = pque<pint>;
const long long INF = 1e16, MOD = 1e9 + 7, LIMIT = 100001;
const long long dx4[] = {-1, 0, 1, 0}, dy4[] = {0, -1, 0, 1};
const long long dx8[] = {-1, 0, 1, -1, 1, -1, 0, 1},
                dy8[] = {-1, -1, -1, 0, 0, 1, 1, 1};
const long double EPS = 1e-9;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long factorial(long long a) { return a < 2 ? 1 : factorial(a - 1) * a; }
long long summation(long long a) { return a < 1 ? 0 : (a * a + a) / 2; }
long long combination(long long n, long long r) {
  long long res = 1;
  for (long long i = (long long)(1); i < (long long)(r + 1); i++)
    res *= n--, res /= i;
  return res;
}
const str alphabet = "abcdefghijklmnopqrstuvwxyz";
long long c, n, m, x, y, z, w, h, res = 0, cnt = 0, sum = 0, mx = -INF,
                                  mn = INF;
str s, t;
bool flag = true;
signed main() {
  cin.tie(0), ios::sync_with_stdio(false);
  cin >> n >> h;
  long long a[n], b[n];
  for (long long i = (long long)(0); i < (long long)(n); i++) {
    cin >> a[i] >> b[i];
    mx = max(mx, b[i]);
  }
  sort(a, a + n, greater<long long>());
  long long i = 0;
  while (a[i] > mx && h >= 0) {
    res++, h -= a[i], i++;
  }
  while (h >= 0) {
    res++, h -= mx;
  }
  cout << (res), cout << '\n';
}
