#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll INF = 1e16;
const ll mod = 1000000007;
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int ctoi(char c) {
  if (c >= '0' && c <= '9') {
    return c - '0';
  }
  return 0;
}
ll factorial(ll n) {
  if (n == 1) {
    return 1;
  }
  ll ans = factorial(n - 1);
  return ans * n;
}
ll gcd(ll a, ll b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
ll lcm(ll a, ll b) { return (a / gcd(a, b)) * b; }
bool is_prime(ll n) {
  for (ll i = 2; i * i <= n; i++) {
    if (n % i == 0) return false;
  }
  return n != 1;
}
ll mod_pow(ll x, ll n, ll mod) {
  if (n == 0) return 1;
  ll res = mod_pow(x * x % mod, n / 2, mod);
  if (n & 1) res = res * x % mod;
  return res;
}
int main() {
  ll n, h;
  cin >> n >> h;
  vector<pair<ll, ll>> a(n, pair<ll, ll>());
  vector<pair<ll, ll>> b(n, pair<ll, ll>());
  map<ll, ll> score;
  for (int i = 0; i < (int)(n); i++) {
    cin >> a.at(i).first >> b.at(i).first;
    a.at(i).first = -a.at(i).first;
    a.at(i).second = i;
    b.at(i).second = -i;
    score[i] = b.at(i).first;
  }
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  ll res = 1;
  ll ap = -a.at(0).first, loc = a.at(0).second;
  h -= score.at(loc);
  for (ll i = n - 1; b.at(i).second != -loc; i--) {
    if (h <= 0) break;
    h -= b.at(i).first;
    res++;
  }
  if (h > 0) {
    if (h % ap)
      res += h / ap + 1;
    else
      res += h / ap;
  }
  cout << res << endl;
}
