#include<bits/stdc++.h>
using namespace std;
int isprm[30004];
int zs[4000],cnt=0;
bool xbx[10004];
long long zyzgs[10003][3900];
long long m1zyzgs[30009];
int main(){
int n,m1,m2,t=0,tmp,f=0,x,y;
bool ff=0;
long long ans=1844674407370955160,mx=0,tmpmx=0;
scanf("%d%d%d",&n,&m1,&m2);
for(int i=2;i<=30000;i++){
if(!isprm[i]){
cnt++; zs[cnt]=i;
}
for(int j=1;j<=cnt && i*zs[j]<=30000;j++){
isprm[i*zs[j]]=1;
if(i%zs[j]==0) break;
}
}
if(m1!=1) for(int i=1;i<=cnt && zs[i]<=m1;i++){
while(m1%zs[i]==0){
m1zyzgs[i]++; m1/=zs[i];
if(m1%zs[i]){
m1zyzgs[i]*=m2;
}
}
}
else ff=1;
for(int i=1;i<=n;i++){
scanf("%d",&tmp);
if(ff) continue;
if(tmp==1){
f++; continue;
}
for(int j=1;j<=cnt && zs[j]<=tmp;j++){
while(tmp%zs[j]==0){
zyzgs[i][j]++; tmp/=zs[j];
}
}
for(int j=1;j<=cnt;j++){
tmpmx=0;
if(m1zyzgs[j] && !zyzgs[i][j]){
xbx[i]=1; f++; break;
}
if(zyzgs[i][j] && m1zyzgs[i]){
tmpmx=m1zyzgs[j]/zyzgs[i][j];
if(m1zyzgs[j]%zyzgs[i][j]!=0) tmpmx++;
if(tmpmx>mx) mx=tmpmx;
}
}
if(xbx[i]){
continue;
}
if(mx<ans) ans=mx;
mx=0;
}
if(ff){
printf("0"); return 0;
}
if(f==n) printf("-1");
else printf("%lld",ans);
return 0;
}