#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
typedef vector<long long> VL;
typedef vector<VL> VLL;
typedef vector<pair<long long, long long>> PS;
template <class T, class U>
bool chmax(T &map<long long, long long> MP;, U b) {
  if (map<long long, long long> MP; <= b) {
    map<long long, long long> MP;
    = b;
    return 1;
  }
  return 0;
}
template <class T, class U>
bool chmin(T &map<long long, long long> MP;, U b) {
  if (map<long long, long long> MP; > b) {
    map<long long, long long> 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() {
  long long n, k, m, x = 0, y = 0, z = 0, h = 0, w = 0, ans = 0, sum = 0,
                     Max = -1, Min = 3e9 + 1;
  string t;
  bool ok = true;
  cin >> n >> h;
  PS map<long long, long long> MP;
  (n), c(n - 1);
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    map<long long, long long> MP;
    [i] = make_pair(x, y);
  }
  sort((map<long long, long long> MP;).begin(),
       (map<long long, long long> MP;).end());
  Max = map<long long, long long> MP;
  [n - 1].first;
  for (int i = 0; i < n; i++) {
    if (Max == map<long long, long long> MP;[i].first && ok) {
      ok = false;
      z = i;
    }
  }
  swap(map<long long, long long> MP;[z], map<long long, long long> MP;[n - 1]);
  Max = map<long long, long long> MP;
  [n - 1].first;
  for (int i = 0; i < n; i++) {
    cout << map<long long, long long> MP;
    [i].first << " " << map<long long, long long> MP;
    [i].second << endl;
  }
  for (int i = 0; i < n - 1; i++) {
    c[i].first = map<long long, long long> MP;
    [i].second;
    c[i].second = map<long long, long long> MP;
    [i].first;
  }
  sort((c).begin(), (c).end());
  for (int i = 0; i < n - 1; i++) {
    if (h <= c[i].second) {
      cout << (1) << "\n";
      return 0;
    }
  }
  for (int i = 0; i < n - 1; i++) {
    if (Max < c[i].first) {
      h -= c[i].first;
      ans++;
    }
    if (h <= 0) {
      cout << (ans) << "\n";
      return 0;
    }
  }
  while (h > 0) {
    if (h <= map<long long, long long> MP;[n - 1].second) {
      h -= map<long long, long long> MP;
      [n - 1].second;
    } else {
      h -= Max;
    }
    ans++;
  }
  cout << (ans) << "\n";
  return 0;
}
