#include <bits/stdc++.h>
using namespace std;
template <class T>
ostream& print_collection(ostream& s, T const& a) {
  s << '[';
  for (auto it = begin(a); it != end(a); ++it) {
    s << *it;
    if (it != prev(end(a))) s << " ";
  }
  return s << ']';
}
template <class T, size_t N>
ostream& operator<<(ostream& s, array<T, N> const& a) {
  return print_collection(s, a);
}
template <class T>
ostream& operator<<(ostream& s, vector<T> const& a) {
  return print_collection(s, a);
}
template <class T, class U>
ostream& operator<<(ostream& s, multimap<T, U> const& a) {
  return print_collection(s, a);
}
template <class T>
ostream& operator<<(ostream& s, multiset<T> const& a) {
  return print_collection(s, a);
}
template <class T, class U>
ostream& operator<<(ostream& s, map<T, U> const& a) {
  return print_collection(s, a);
}
template <class T>
ostream& operator<<(ostream& s, set<T> const& a) {
  return print_collection(s, a);
}
template <class A, class B>
ostream& operator<<(ostream& s, pair<A, B> const& a) {
  return s << "(" << (a).first << ", " << (a).second << ")";
}
using ll = long long int;
using ld = long double;
using vi = vector<int>;
using vl = vector<ll>;
using vb = vector<bool>;
using pi = pair<int, int>;
using pl = pair<ll, ll>;
using ti = tuple<int, int, int>;
using tl = tuple<ll, ll, ll>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using vvb = vector<vb>;
using vpi = vector<pi>;
using vpl = vector<pl>;
using vti = vector<ti>;
using vtl = vector<tl>;
using ppi = pair<pi, int>;
using ppl = pair<pl, ll>;
template <class T>
using min_queue = priority_queue<T, vector<T>, greater<T>>;
template <class T>
using max_queue = priority_queue<T>;
const ll MOD = 1e9 + 7;
const int INF = 1e9;
const ll INF_LL = 1e18;
int main(void) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.precision(10);
  cout << fixed;
  ll n, h;
  cin >> n >> h;
  vl a(n), b(n);
  ll sum_b = 0;
  ll max_a = 0;
  for (ll i = 0; i < (ll)(n); ++i) {
    cin >> a[i] >> b[i];
    sum_b += b[i];
    max_a = max(max_a, a[i]);
  }
  sort((b).begin(), (b).end(), greater<ll>());
  ll i = 0;
  while (i < n) {
    if (h < 0 || b[i] < max_a) break;
    h -= b[i];
    ++i;
  }
  ll ans = i;
  while (h > 0) {
    h -= max_a;
    ++ans;
  }
  cout << ans << '\n';
  return 0;
}
