#include <bits/stdc++.h>
using namespace std;
struct P {
  int x, y, z;
  bool operator<(const P &a) const { return x > a.x; }
};
int a, b, c, i, k, o[410002], n, m, d, e, dy[15] = {0, 0, -1, 1, -1, 1, -1, 1},
                                          dx[15] = {-1, 1, 0, 0, 1, 1, -1, -1};
long long l[100100][51];
long long x, y, z, v1, v2;
P u[200600];
int j[60];
priority_queue<int> q[5], q1;
stack<int> s;
map<int, int> p;
string r, r1;
bool as(int a, int b) { return a > b; }
long long f(long long a, int b) {
  if (b == 0 && a * c < n) return 0;
  if (b == 0) return 1;
  if (l[a][b] >= 0) return l[a][b];
  return l[a][b] = max(f(min(a * o[b], (long long)n), b - 1),
                       min(f(a, b - 1) * o[b], (long long)m));
}
int main() {
  scanf("%d %d %d %d %d", &n, &m, &c, &d, &e);
  for (int t = 1; t <= e; t++) scanf("%d", &o[t]);
  sort(o + 1, o + 1 + e, as);
  if ((n <= c && m <= d) || (m <= c && n <= d)) {
    puts("0");
    return 0;
  }
  for (i = 1; i <= min(40, e); i++) {
    memset(l, -1, sizeof(l));
    if (f(1, i) * d >= m) {
      printf("%d", i);
      return 0;
    }
    swap(n, m);
    memset(l, -1, sizeof(l));
    if (f(1, i) * d >= m) {
      printf("%d", i);
      return 0;
    }
  }
  puts("-1");
}
