#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 0x3f3f3f3f3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-9;
const long long mod = 1e9 + 7;
long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch<'0' | ch> '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void Out(int aa) {
  if (aa > 9) Out(aa / 10);
  putchar(aa % 10 + '0');
}
long long node[100010];
long long a, b, q;
long long ans = INFF;
long long dfs(long long up, long long n1, long long n2, long long sum,
              int num) {
  if (up < 0 || num > 20) return INFF;
  if (n1 >= a) {
    for (int i = up; i >= 1 && n2 < b; i--) n2 *= node[i], sum++;
    if (n2 < b) return INFF;
    return sum;
  } else if (n2 >= b) {
    for (int i = up; i >= 1 && n1 < a; i--) n1 *= node[i], sum++;
    if (n1 < a) return INFF;
    return sum;
  }
  return min(dfs(up - 1, n1 * node[up], n2, sum + 1, num + 1),
             dfs(up - 1, n1, n2 * node[up], sum + 1, num + 1));
}
int main() {
  a = read(), b = read();
  long long n = read(), m = read();
  q = read();
  for (int i = 1; i <= q; i++) node[i] = read();
  sort(node + 1, node + 1 + q);
  if (a <= n) {
    if (b <= m)
      ans = 0;
    else {
      long long num = 0;
      long long k = m;
      for (int i = q; i >= 1 && k < b; i--) k *= node[i], num++;
      if (k < b)
        ans = min(ans, INFF);
      else
        ans = min(ans, num);
    }
  }
  swap(n, m);
  if (a <= n) {
    if (b <= m)
      ans = 0;
    else {
      long long num = 0;
      long long k = m;
      for (int i = q; i >= 1 && k < b; i--) k *= node[i], num++;
      if (k < b)
        ans = min(ans, INFF);
      else
        ans = min(ans, num);
    }
  } else {
    if (b <= m) {
      long long num = 0;
      long long k = n;
      for (int i = q; i >= 1 && k < a; i--) k *= node[i], num++;
      if (k < a)
        ans = min(ans, INFF);
      else
        ans = min(ans, num);
    }
    swap(n, m);
    if (b <= m) {
      long long num = 0;
      long long k = n;
      for (int i = q; i >= 1 && k < a; i--) k *= node[i], num++;
      if (k < a)
        ans = min(ans, INFF);
      else
        ans = min(ans, num);
    } else {
      ans = min(ans, min(dfs(q, n, m, 0, 0), dfs(q, m, n, 0, 0)));
    }
  }
  if (ans == INFF) {
    printf("-1\n");
  } else
    printf("%d\n", ans);
  return 0;
}
