只有10分
#include <bits/stdc++.h>
using namespace std ;
int MAXSIZE = 100000 ;
int m1, m2 ;
int pri[100005] ;
bool p[100005] ;
int cnt = 0 ;
int MAX = 0 ;
int ans = 0x7fffffff ;
void check()
{
//is prime:0
// is not: 1
p[0] = p[1] = 1 ;
for (int i = 2 ;i <= MAXSIZE ;i ++)
{
if (p[i] == 0)
{
cnt ++ ;
pri[cnt] = i ;
}
for (int j = 1 ;j <= cnt && i * pri[j] <= MAXSIZE ;j ++)
{
p[i * pri[j]] = 1 ;
if (i % pri[j] == 0)
{
break ;
}
}
}
}
int top ;
int P[100005] ;
int T[100005] ;
int n ;
int main()
{
check() ;
cin >> n ;
cin >> m1 >> m2 ;
for (int i = 1 ;pri[i] <= m1 ;i ++)
{
while(m1 % pri[i] == 0)
{
MAX = max(MAX, pri[i]) ;
m1 /= pri[i] ;
P[pri[i]] += m2 ;
}
}
for (int i = 1 ;i <= n ;i ++)
{
int temp ;
cin >> temp ;
for (int j = 1 ;pri[j] <= MAXSIZE ;j ++)
{
T[pri[j]] = 0 ;
}
for (int j = 1 ;pri[j] <= temp ;j ++)
{
while(temp % pri[j] == 0)
{
MAX = max(MAX, pri[j]) ;
temp /= pri[j] ;
T[pri[j]] ++ ;
}
}
int ans2 = 1 ;
while(ans2 <= 10000)
{
bool ac = 1 ;
for (int j = 1 ;pri[j] <= MAX ;j ++)
{
if (T[pri[j]] == 0 && P[pri[j]] > 0)
{
ac = 1 ;
ans2 = 0x7fffffff ;
break ;
}
else if (T[pri[j]] < P[pri[j]])
{
ans2 ++ ;
ac = 0 ;
for (int k = 1 ;pri[k] <= MAX ;k ++)
{
T[pri[k]] *= 2 ;
}
}
}
if (ac)
{
break ;
}
}
ans = min(ans, ans2) ;
}
if (ans = 0x7fffffff)
{
cout << -1 << endl ;
}
else
{
cout << ans << endl ;
}
return 0 ;
}