#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using Edge = pair<ll, ll>;
using Graph = vector<vector<Edge>>;
struct aaa {
  aaa() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    cout << fixed << setprecision(20);
  };
} aaaaaaa;
int MOD = 1e9 + 7;
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); }
ll devc(ll x, ll y) { return 1 + (x - 1) / y; }
ll solve(ll N, ll H, vector<pair<ll, ll>> pair<ll, ll>) {
  ll ans = 0;
  ll mxa = pair<ll, ll>[N - 1].first;
  ll mxb = -pair<ll, ll>[N - 1].second;
  vector<ll> C;
  for (ll i = 0; i < (N); ++i) C.push_back(-pair<ll, ll>[i].second);
  sort((pair<ll, ll>).rbegin(), (pair<ll, ll>).rend());
  for (ll i = 0; i < (N); ++i)
    if (C[i] >= mxa) {
      H -= C[i];
      ans++;
      if (H <= 0) return ans;
    }
  ans += devc(H, mxa);
  return ans;
}
int main() {
  ll N, H;
  cin >> N >> H;
  vector<pair<ll, ll>> pair<ll, ll>(N);
  for (ll i = 0; i < (N); ++i) {
    ll a, b;
    cin >> a >> b, pair<ll, ll>[i] = {a, -b};
  }
  sort((pair<ll, ll>).begin(), (pair<ll, ll>).end());
  cout << (solve(N, H, pair<ll, ll>)) << '\n';
  return 0;
}
