#include <bits/stdc++.h>
using namespace std;
const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};
constexpr int INF = 100000000;
constexpr long long LINF = 10000000000000000ll;
constexpr int MOD = static_cast<int>(1e9 + 7);
constexpr double EPS = 1e-9;
long long N, H;
vector<long long> a, b;
void init() {}
void solve() {
  long long ans = 0;
  sort((a).begin(), (a).end());
  sort((b).begin(), (b).end());
  auto it = upper_bound((b).begin(), (b).end(), a[N - 1]);
  if (it == b.end()) {
    ans = H / a[N - 1] + (H % a[N - 1] == 0 ? 0 : 1);
  } else {
    long long s = 0;
    for (auto i = it; i != b.end(); i++) {
      s += *i;
      ans++;
      if (s >= H) break;
    }
    if (s < H) {
      H -= s;
      ans += H / a[N - 1] + (H % a[N - 1] == 0 ? 0 : 1);
    }
  }
  cout << ans << endl;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> N >> H;
  a.resize(N);
  b.resize(N);
  for (long long i = 0ll; i < static_cast<long long>(N); i++) {
    cin >> a[i] >> b[i];
  }
  solve();
  return 0;
}
