#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=3e6;
int prime[maxn],vprime[maxn],cprime[maxn];
int k,nex[maxn];
int x;
bool isprime[maxn];
int cnt;
int n,m1,m2;
int ans=0x7f7f7f7f;
void pr()
{
for (int i=2;i<=maxn-5;i++)
{
if (!isprime[i])
{
isprime[i]=true;
prime[cnt++]=i;
}
for (int j=0; j<cnt && prime[j]*i<=maxn-5; j++)
{
isprime[prime[j]*i]=true;
if (!i%prime[j])
break;
}
}
}
bool g(int t, int val, int op)
{
if(op)
{
for (int i=0;i<cnt&&t!=1;i++)
{
while (!(t%prime[i]))
{
vprime[i]+=val;
t/=prime[i];
}
}
}
else
{
k=0;
for(int i=0;i<cnt&&t!=1;i++)
{
bool vis=true;
while (!(t%prime[i]))
{
if (vis)
{
vis=false;
nex[k++]=i;
}
cprime[i]+=val;
t/=prime[i];
}
if (vprime[i] && !cprime[i])
return false;
}
}
return true;
}
int main ()
{
scanf("%d",&n);
scanf("%d%d",&m1,&m2);
pr();
g(m1,m2,1);
for (int i=1;i<=n;i++)
{
cin >> x;
bool f=g(x,1,0);
if (!f) continue;
int ma=0;
for (int j=0;j<k;j++)
{
int c=nex[j];
int nu=cprime[c];
cprime[c]=0;
nex[j]=0;
if (vprime[c]==0) continue;
int z=(vprime[c] % nu);
if (!z)
ma=max(ma,vprime[c] / nu);
else
ma=max(ma,vprime[c] / nu +1);
}
ans=min(ans,ma);
}
if (ans==0x7f7f7f7f)
printf("-1");
else
printf("%d",ans);
return 0;
}
1,7,8过了 卡的第二个点有1w组数据,锣鼓给的错误信息为输出0,其他的错误信息也是输出的0\ 到底是哪里错了啊