#include <bits/stdc++.h>
typedef long long ll;
const int INF = 1000000000;
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
int main() {
  int n, h;
  cin >> n >> h;
  vector<int> a(n);
  vector<int> b(n);
  for (int i = 0; i < (n); ++i) cin >> a[i] >> b[i];
  map<int, pair<int, bool>, greater<int>> map_;
  for (int i = 0; i < (n); ++i) map_[b[i]] = make_pair(i, false);
  for (int i = 0; i < (n); ++i) map_[a[i]] = make_pair(i, true);
  int ans = 0;
  int min_ = INF;
  int hp = h;
  set<int> used;
  for (auto& m : map_) {
    if (m.second.second) {
      if (used.count(m.second.first) == 1) {
        hp += b[m.second.first];
        ans--;
        int tt = ans + (hp + m.first - 1) / m.first;
        min_ = min(tt, min_);
        hp -= b[m.second.first];
        ans++;
      } else {
        ans += (hp + m.first - 1) / m.first;
        min_ = min(ans, min_);
      }
    }
    if (!m.second.second) {
      hp -= m.first;
      ++ans;
      used.insert(m.second.first);
      if (hp <= 0) {
        min_ = min(ans, min_);
      }
    }
  }
  cout << min_ << endl;
  return 0;
}
