rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int prims;
int minn=INT_MAX;
bool flag;
int prime[10000001];
int tube[10000001];
bool is_prime(int k)
{
int m;
for(m=2;m<=floor(sqrt(k));m++)
if(k%m==0)return false;
return true;
}
int m1,m2;
int cell[10000001];
signed main(){
cin>>n;
cin>>m1>>m2;
for(int i=1;i<=n;i++){
cin>>cell[i];
}
for(int i=2;i<=30000+10;i++){
if(is_prime(i)){
prims++;
prime[prims]=i;
}
}
int i=1;
while(m1!=1){
if(m1%prime[i]==0){
while(m1%prime[i]==0){
tube[i]+=m2;
m1/=prime[i];
}
}
i++;
}
for(int i=1;i<=n;i++){
int j=1;
int now=0;
int nfl=1;
memset(prime,0,sizeof(prime));
while(j<=prims){
if(cell[i]%prime[j]==0){
while(cell[i]%prime[j]==0){
prime[j]++;
cell[i]/=prime[j];
}
}
j++;
}
for(j=1;j<=prims;j++){
if(tube[j]!=0&&prime[j]==0){
nfl=0;
}
if(tube[j]!=0&&prime[j]!=0){
if(tube[j]%prime[j]==0){
now=max(now,tube[j]/prime[j]);
}
else{
now=max(now,tube[j]/prime[j]+1);
}
}
if(nfl==1){
flag=1;
if(now<minn){
minn=now;
}
}
}
}
if(flag==0){
cout<<-1<<'\n';
}
else{
cout<<minn<<'\n';
}
return 0;
}