#include #define rep(i,n) for(int i = 0; i < (n); ++i) #define srep(i,s,t) for (int i = s; i < t; ++i) #define drep(i,n) for(int i = (n)-1; i >= 0; --i) using namespace std; typedef long long int ll; typedef pair P; #define yn {puts("YES");}else{puts("NO");} #define MAX_N 200005 int main() { ll n, m, p; cin >> n >> m >> p; ll a[n] = {}; ll ma = 0; rep(i,n){ cin >> a[i]; ma = max(ma, a[i]); } if(ma > m){ cout << 1 << endl; return 0; } ll b[n] = {}, f[n] = {}; ma = 0; rep(i,n){ b[i] = a[i]; while(b[i] % p == 0){ f[i]++; b[i] /= p; } ma = max(ma, b[i]); } if(ma <= 1){ cout << -1 << endl; return 0; } ll c[100] = {}; rep(i,100) c[i] = 1; rep(i,n){ c[f[i]] = max(c[f[i]], b[i]); } const ll INF = 1001001001; ll dp[2000]; rep(i,2000) dp[i] = 1; rep(i,1000){ rep(j,100){ dp[i+j+1] = max(dp[i+j+1], dp[i] * c[j]); if(dp[i+j+1] > INF) dp[i+j+1] = INF; } } ma = 0; rep(i,n) ma = max(ma, a[i]); int ans = 1001001; rep(i,2000){ if(dp[i] * ma > m){ ans = min(ans, i+1); } } cout << ans << endl; return 0; }