#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
using LL = long long;
template <typename T>
using V = vector<T>;
template <typename T, typename S>
using P = pair<T, S>;
using LD = long double;
template <typename T, typename S>
void check(T& a, const S& b) {
  if (a >= b) {
    a %= b;
  }
}
template <typename T>
T gcd(T u, T v) {
  if (u == v) return u;
  if (u == 0) return v;
  if (v == 0) return u;
  if (~u & 1) {
    if (v & 1)
      return gcd(u >> 1, v);
    else
      return gcd(u >> 1, v >> 1) << 1;
  }
  if (~v & 1) return gcd(u, v >> 1);
  if (u > v) return gcd((u - v) >> 1, v);
  return gcd((v - u) >> 1, u);
}
const int N = 100001;
map<P<int, int>, int> dp[N];
int get(int i, int j, int k, const int& x, const int& y, const V<int>& A) {
  if (dp[i].count({j, k})) return dp[i][{j, k}];
  auto& ans = dp[i][{j, k}];
  if (j >= x && k >= y) return ans = 0;
  if (i >= (int)A.size()) return ans = (int)1e9;
  ans = (int)1e9;
  if (j < x) {
    LL temp = min(x * 1LL, j * 1LL * A[i]);
    ans = min(ans, 1 + get(i + 1, temp, k, x, y, A));
  }
  if (k < y) {
    LL temp = min(y * 1LL, k * 1LL * A[i]);
    ans = min(ans, 1 + get(i + 1, j, temp, x, y, A));
  }
  return ans;
}
int solve(int a, int b, int h, int w, V<int>& A) {
  int x = (a + h - 1) / h;
  int y = (b + w - 1) / w;
  int ans = (int)1e9;
  ans = min(ans, get(0, 1, 1, x, y, A));
  for (int i = 0; i < N; i++) dp[i].clear();
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cerr.tie(NULL);
  ;
  int a, b, h, w, n;
  cin >> a >> b >> h >> w >> n;
  V<int> A(n);
  for (int i = 0; i < n; i++) cin >> A[i];
  sort(A.begin(), A.end());
  reverse(A.begin(), A.end());
  int ans = solve(a, b, h, w, A);
  ans = min(ans, solve(b, a, h, w, A));
  if (ans == (int)1e9) ans = -1;
  cout << ans << '\n';
  cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms"
       << '\n';
  return 0;
}
