#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5, LIMIT = 1e5 + 4;
int a, b, h, w, n;
int p, q;
int A[MAXN];
int dp[41][MAXN];
long long calc[MAXN];
void solve(int pos, int k) {
  int &t = dp[pos][k];
  if (t != -1) return;
  t = 0;
  if (k >= p && calc[pos] / k >= q) {
    t = 1;
  }
  if (pos >= 40 || pos >= n) return;
  long long tmp = (long long)k * A[pos];
  solve(pos + 1, k);
  solve(pos + 1, tmp > LIMIT ? LIMIT : tmp);
}
int main() {
  memset(dp, -1, sizeof dp);
  scanf("%d%d%d%d%d", &a, &b, &h, &w, &n);
  if (a < b) swap(a, b);
  if (h < w) swap(h, w);
  for (int i = 0; i < n; ++i) {
    scanf("%d", A + i);
  }
  sort(A, A + n);
  reverse(A, A + n);
  calc[0] = 1;
  for (int i = 1; i <= 40 && i <= n; ++i) {
    calc[i] = calc[i - 1] * A[i - 1];
    if (calc[i] > 1e12) calc[i] = 1e12;
  }
  p = ceil((double)a / h);
  q = ceil((double)b / w);
  solve(0, 1);
  int sol = 1e9;
  for (int i = 0; i <= 40; ++i) {
    for (int j = 1; j <= LIMIT; ++j) {
      if (dp[i][j] == 1) {
        sol = min(sol, i);
      }
    }
  }
  p = ceil((double)b / h);
  q = ceil((double)a / w);
  memset(dp, -1, sizeof dp);
  solve(0, 1);
  for (int i = 0; i <= 40; ++i) {
    for (int j = 1; j <= LIMIT; ++j) {
      if (dp[i][j] == 1) {
        sol = min(sol, i);
      }
    }
  }
  if (sol == 1e9) sol = -1;
  printf("%d\n", sol);
  return 0;
}
