#include<bits/stdc++.h>
using namespace std;
#define ll long long
bool vis[30001];
ll prime[30001];
ll dnum[30001][2];
ll dnum_x[30001][2];
ll cnt=1,cnt1=1;
ll m1,m2,n,cell;
inline ll read(){
ll a=0;ll f=0;char p=getchar();
while(!isdigit(p)){f|=p=='-';p=getchar();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=getchar();}
return f?-a:a;
}
void prime_pre(){
memset(vis,1,sizeof(vis));
vis[1]=1;
for(ll i=2;i<=m1;i++){
if(vis[i])
prime[cnt++]=i;
for(ll j=1;j<cnt&&i*prime[j]<=m1;j++){
vis[i*prime[j]]=0;
if(i%prime[j]==0)break;
}
}
}
void decom_m1(){
ll index=1;
while(m1!=1&&index<cnt){
ll p=prime[index];
if(m1%p==0){
dnum[cnt1][0]=p;
while(m1%p==0){
m1/=p;
dnum[cnt1][1]++;
}
dnum[cnt1][1]*=m2;
cnt1++;
}
index++;
}
}
void decom_cell(ll x){
memset(dnum_x,0,sizeof(dnum_x));
ll index=1;
while(x!=1&&index<cnt){
ll p=prime[index];
if(x%p==0){
dnum_x[p][0]=1;
while(x%p==0){
x/=p;
dnum_x[p][1]++;
}
}
index++;
}
}
void pre(){
n=read();m1=read();m2=read();
if(m1==1){
cout<<0;
exit(0);
}
prime_pre();
decom_m1();
}
int main(){
pre();
bool flag=1;
ll maxn=0,ans=0x3f3f3f3f;
while(n--){
bool f=0;
cell=read();
maxn=0;
decom_cell(cell);
for(ll i=1;i<cnt1;i++){
ll d=dnum[i][0];
if(dnum_x[d][0]!=1){
f=1;
break;
}
maxn=max(maxn,(ll)ceil(dnum[i][1]*1.0/dnum_x[d][1]*1.0));
}
if(!f)flag=0;
ans=min(ans,maxn);
}
if(flag){
puts("-1");
return 0;
}
printf("%lld",ans);
return 0;
}