#include<bits/stdc++.h>
using namespace std;
int n,m1,m2,temp,minn=2e9;
struct node{
int number,cnt=0;
}m_node[105];
int idx=0;
int main(){
cin>>n;
cin>>m1>>m2;
for(int i=2;i<=m2;++i){
if(m1%i==0){
idx++;
m_node[idx].number=i;
while(m1%i==0){
m_node[idx].cnt++;
m1/=i;
}
m_node[idx].cnt*=m2;
}
}
while(n--){
cin>>temp;
bool flag=true;
for(int i=1;i<=idx;++i){
if(temp%m_node[i].number!=0){
flag=false;
}
}
if(flag){
int maxn=0;
for(int i=1;i<=idx;++i){
int cnt=0;
while(temp%m_node[i].number==0){
cnt++;
temp/=m_node[i].number;
}
int sec=(m_node[i].cnt-1)/cnt+1;
maxn=max(maxn,sec);
}
minn=min(minn,maxn);
}
}
if(minn==2e9){
cout<<-1;
}else{
cout<<minn;
}
return 0;
}