#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
typedef long long ll;
typedef vector<int> VI;
typedef vector<VI> VII;
template <class T, class U>
bool chmax(T& map<int, int> MP;, U b) {
  if (map<int, int> MP; < b) {
    map<int, int> MP;
    = b;
    return 1;
  }
  return 0;
}
template <class T, class U>
bool chmin(T& map<int, int> MP;, U b) {
  if (map<int, int> MP; > b) {
    map<int, int> MP;
    = b;
    return 1;
  }
  return 0;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& v) {
  os << "{";
  for (int i = 0; i < (int)v.size(); i++) {
    os << v[i] << (i < v.size() - 1 ? ", " : "");
  }
  os << "}";
  return os;
}
int main() {
  ll x, y, z, n, m = 0, k, h, w, sum = 0, sum_a = 0, sum_b = 0, ans = 0,
                 Max = -1e9, count = 0, Min = 1e9 + 1;
  string s, t, u, v;
  bool ok = true;
  cin >> n >> h;
  vector<pair<ll, ll> > p(n);
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    p[i] = make_pair(x, y);
  }
  sort((p).begin(), (p).end());
  Max = p[n - 1].first;
  for (int i = 0; i < n - 1; i++) {
    if (p[i].second > Max) {
      h -= p[i].second;
      ans++;
    }
  }
  if (Max < p[n - 1].second) {
    h -= p[n - 1].second;
    ans++;
    ans += ceil((double)h / Max);
    cout << ans << endl;
  } else {
    ans += ceil((double)h / Max);
    cout << ans << endl;
  }
  return 0;
}
