#include<bits/stdc++.h>
using namespace std;
int N, m1, m2, s[10005];
struct factor
{
int index[205], base[205], sum;
}M, S[10005];
void doit( int num, int t, bool flag, int id )
{
int idx = 0;
for( int i = 2; i <= num / i; i++ )
{
if( num % i == 0 )
{
int cnt = 0;
while( num % i == 0 )
cnt++, num /= i;
if( !flag )
M.base[++idx] = i, M.index[idx] = cnt * t;
else
S[id].base[++idx] = i, S[id].index[idx] = cnt * t;
}
}
if( num > 1 )
{
if( !flag )
M.base[++idx] = num, M.index[idx] = t;
else
S[id].base[++idx] = num, S[id].index[idx] = t;
}
if( !flag )
M.sum = idx;
else
S[id].sum = idx;
return;
}
int f( int a, int b )
{
int step = 1;
while( a < b )
{
a *= 2;
step++;
}
return step;
}
int cal( int id )
{
for( int i = 1; i <= M.sum; i++ )
{
int idx = lower_bound( S[id].base + 1, S[id].base + S[id].sum + 1, M.base[i] ) - S[id].base;
if( S[id].base[idx] != M.base[i] )
return -1;
}
int ans = 0;
for( int i = 1; i <= M.sum; i++ )
{
int idx = lower_bound( S[id].base + 1, S[id].base + S[id].sum + 1, M.base[i] ) - S[id].base;
ans = max( ans, f( S[id].index[idx], M.index[i] ) );
}
return ans;
}
int main()
{
scanf( "%d%d%d", &N, &m1, &m2 );
for( int i = 1; i <= N; i++ )
scanf( "%d", &s[i] );
if( m1 == 1 )
{
printf( "%d", 0 );
return 0;
}
doit( m1, m2, 0, 0 );
for( int i = 1; i <= N; i++ )
doit( s[i], 1, 1, i );
int minstep = INT_MAX;
for( int i = 1; i <= N; i++ )
{
int x = cal(i);
if( x == -1 )
continue;
minstep = min( minstep, x );
}
printf( "%d", minstep == INT_MAX ? -1 : minstep );
return 0;
}