#include <algorithm>
#include <cstdio>
#include <map>
using namespace std;
int n, s[10001], m1, m2, t = -1;
map<int, int> fs[30001], fm;
inline void f(int y, int x) {
for (int i = 2; i * i <= x; i++)
while (!(x % i)) {
x /= i;
if (!y)
fm[i] += m2;
else
++fs[y][i];
}
if (x > 1) {
if (!y)
fm[x] += m2;
else
++fs[y][x];
}
}
int main() {
scanf("%d%d%d", &n, &m1, &m2);
if (m1 == 1) {
printf("0\n");
return 0;
}
for (int i = 1; i <= n; i++) {
scanf("%d", &s[i]);
f(i, s[i]);
}
f(0, m1);
for (int i = 1; i <= n; i++) {
bool flag = true;
int mat = -1;
for (auto x : fm) {
int T;
if (!fs[i][x.first]) {
flag = false;
break;
}
if (x.second <= fs[i][x.first]) {
mat = max(mat, 0);
break;
}
if (x.second % fs[i][x.first])
T = x.second / fs[i][x.first] + 1;
else
T = x.second / fs[i][x.first];
mat = max(mat, T);
}
if (flag)
t = (t == -1?mat:min(t, mat));
}
printf("%d\n", t);
return 0;
}