#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T1, class T2>
ostream& operator<<(ostream& s, pair<T1, T2> P) {
  return s << '<' << P.first << ", " << P.second << '>';
}
template <class T>
ostream& operator<<(ostream& s, vector<T> P) {
  for (int i = 0; i < P.size(); ++i) {
    if (i > 0) {
      s << " ";
    }
    s << P[i];
  }
  return s;
}
template <class T>
ostream& operator<<(ostream& s, vector<vector<T> > P) {
  for (int i = 0; i < P.size(); ++i) {
    s << endl << P[i];
  }
  return s << endl;
}
template <class T1, class T2>
ostream& operator<<(ostream& s, map<T1, T2> P) {
  for (__typeof__((P).begin()) it = (P).begin(); it != (P).end(); ++it) {
    s << "<" << it->first << "->" << it->second << "> ";
  }
  return s << endl;
}
int N;
long long H;
const int MAX = 110000;
pair<long long, long long> inp[MAX];
long long maxa[MAX];
int main() {
  while (cin >> N >> H) {
    long long ball = 0;
    for (int i = 0; i < N; ++i) {
      cin >> inp[i].second >> inp[i].first;
      ball += inp[i].first;
    }
    sort(inp, inp + N);
    for (int i = 0; i < N; ++i) {
    }
    maxa[0] = 0;
    for (int i = 0; i < N; ++i) {
      maxa[i + 1] = max(maxa[i], inp[i].second);
    }
    long long res = H;
    long long sum = 0;
    for (int i = 0; i < N; ++i) {
      long long rem = H - sum;
      if (rem < 0) continue;
      long long add = 0;
      if (rem <= inp[N - i - 1].first)
        add = 1;
      else {
        rem -= inp[N - i - 1].first;
        add = (rem + maxa[N - i] - 1) / maxa[N - i] + 1;
      }
      sum += inp[N - i - 1].first;
      chmin(res, add + i);
    }
    cout << res << endl;
  }
}
