#include <bits/stdc++.h>
using namespace std;
long long fac[2000009], not_prime[2000009];
long long power(long long x, long long n) {
  if (n == 0) return 1;
  if (n % 2 == 0)
    return power((x * x), n / 2);
  else
    return (x * power((x * x), (n - 1) / 2));
}
void fact() {
  fac[0] = 1;
  for (long long i = 1; i < 2000009; i++)
    fac[i] = (i * fac[i - 1]) % 1000000007;
}
void sieve() {
  not_prime[1] = 1;
  not_prime[0] = 1;
  for (long long p = 2; p * p < 2000009; p++) {
    if (!not_prime[p]) {
      for (long long i = p * 2; i <= 2000009; i += p) not_prime[i] = 1;
    }
  }
}
long long modi(long long a, long long m) {
  long long m0 = m, t, q;
  long long x0 = 0, x1 = 1;
  if (m == 1) return 0;
  while (a > 1) {
    q = a / m;
    t = m;
    m = a % m, a = t;
    t = x0;
    x0 = x1 - q * x0;
    x1 = t;
  }
  if (x1 < 0) x1 += m0;
  return x1;
}
long long n, m, ar[2000009], br[2000009], cr[2000009];
vector<long long> g[200009];
int main() {
  long long i, j, k, l, test, flag, ans, x, y;
  string s;
  test = 1;
  while (test--) {
    cin >> n >> x;
    for (i = 1; i <= n; i++) {
      cin >> ar[i] >> br[i];
      cr[i] = br[i];
    }
    l = *max_element(ar + 1, ar + n + 1);
    ans = ceil(x * 1.0 / l);
    sort(cr + 1, cr + n + 1);
    long long y = 0;
    for (i = n; i >= 1; i--) {
      y += cr[i];
      if (x >= y) {
        ans = min((long long)ceil((x - y) * 1.0 / l) + n - i + 1LL, ans);
      } else {
        break;
      }
    }
    cout << ans;
  }
  return 0;
}
