#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
using namespace std;
void FastInputOutput() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
inline int D() {
  int t;
  scanf("%d", &t);
  return t;
}
inline long long LLD() {
  long long t;
  scanf("%lld", &t);
  return t;
}
long long power(long long x, long long p, long long m) {
  long long res = 1;
  while (p) {
    if (p & 1) res = (res * x) % m;
    x = (x * x) % m;
    p >>= 1;
  }
  return res;
}
const int N = 1e5 + 5;
long long b[N];
int main() {
  long long n = D(), h = D();
  long long mxA = -1, mxB = -1;
  for (int i = 0; i < n; ++i) {
    mxA = max(mxA, LLD());
    mxB = max(mxB, b[i] = D());
  }
  sort(b, b + n, [](int s, int f) { return f < s; });
  long long sum = 0;
  long long ans4 = 0;
  for (int i = 0; i < n && b[i] >= mxA && sum <= h; ++i) sum += b[i], ++ans4;
  if (sum < h) ans4 += roundl(ceill(((h - sum) * 1.0 / mxA * 1.0)));
  long long ans0 = INT_MAX;
  if (max(mxA, mxB) >= h) ans0 = 1;
  long long totA = h / mxA;
  long long ans1 = INT_MAX;
  if (((totA - 1) * mxA + mxB) >= h || (totA * mxA >= h)) ans1 = totA;
  long long ans2 = INT_MAX;
  if ((totA + 1) * mxA >= h) ans2 = totA + 1;
  ans0 = min(ans0, ans4);
  printf("%lld", min(ans0, min(ans1, ans2)));
  return 0;
}
