#include<bits/stdc++.h>
#include<vector>
#define int long long
#define for(i,l,n) for(long long i=l;i<=n;i++)
using namespace std;
int n,s;
int m1,m2;
int gcd(int x,int y){
if(y%x==0) return x;
return gcd(y,x%y);
}
int lcm(int x,int y){
return (long long)x*y/gcd(x,y);
}
bool pd(int x){
for(i,2,sqrt(x)){
if(x%i==0) return 0;
}
return 1;
}
int ans[100010],cnt;
int t[100010],q[100100];
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
cin>>n;
cin>>m1>>m2;
int k=m1;
for(i,2,360351){
if(pd(i)) ans[++cnt]=i;
}
int bbase=1;
while(k!=1){
while(k%ans[bbase]==0) t[ans[bbase]]+=m2,k/=ans[bbase];
bbase++;
}
if(m1==1){
cout<<0;return 0;
}
int maxn=1e18;
for(i,1,n){
cin>>s;
if(gcd(s,m1)!=1){
int num=0;
int base=1;
bool flag=0;
while(s!=1){
while(s%ans[base]==0) q[ans[base]]++,s/=ans[base];
base++;
}
for(k,1,bbase){
if(q[ans[k]]==0&&t[ans[k]]!=0){
flag=1;break;
}
else{
if(t[ans[k]]!=0){
num=max(num,t[ans[k]]/q[ans[k]]+bool(t[ans[k]]%q[ans[k]]));
}
}
}
if(flag){
num=1e18;break;
}
for(j,1,bbase) q[ans[j]]=0;
maxn=min(maxn,num);
}
}
if(maxn==1e18)
cout<<-1;
else cout<<maxn;
return 0;
}