QAQ
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=300010;
const int B=2000000000;
int n,m1,m2;
ll prime[N],tot=0;
bool mp[N];
int s[N];
int mi[N],si[N];
void init(int n)
{
for(register int i=2;i<=n;i++)
{
// cout<<"???";
if(!mp[i]) prime[++tot]=i;
for(register int j=1;prime[j]*i<=n&&j<=tot;j++)
{
mp[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
int main()
{
freopen("P1069_2.in","r",stdin);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
init(30000);
// for(int i=1;i<=30000;i++)
// cout<<prime[i]<<endl;
cin>>n>>m1>>m2;
if(m1==1)
{
cout<<0;
return 0;
}
for(int i=1;i<=tot;i++)
{
if(m1==1) break;
while(m1%prime[i]==0)
{
mi[i]++;
m1/=prime[i];
}
mi[i]*=m2;
}
ll minn=1145141919810;
for(int i=1;i<=n;i++)
{
int k;
cin>>k;
if((k>m1&&k%m1!=0)||(k<m1&&m1%k!=0)) continue;
memset(si,0,sizeof si);
int fin=-1,sflag=1;
for(int i=1;i<=tot;i++)
{
fin=i;
int psd=k;
if(k==1) break;
while(k%prime[i]==0)
{
si[i]++;
k/=prime[i];
if(k==1) break;
}
// if(si[i]>2) cout<<psd<<' '<<prime[i]<<' '<<si[i]<<endl;
if((si[i]&&!mi[i])||(!si[i]&&mi[i]))
{
sflag=0;break;
}
}
if(sflag==0) continue;
ll maxn=-10;
for(int i=1;i<=fin;i++)
{
ll ans;
if(mi[i]==0||si[i]==0||mi[i]<si[i]) continue;
ans=( mi[i]%si[i]==0 ? mi[i]/si[i] : mi[i]/si[i]+1 );//向上取整除法
maxn=max(maxn,ans);
// if(si[i]>2)
// cout<<prime[i]<<' '<<mi[i]<<'/'<<si[i]<<'='<<maxn<<endl;
}
if(maxn<0) continue;
minn=min(minn,maxn);
}
if(minn==1145141919810) cout<<-1;
else cout<<minn;
return 0;
}