N, M, P = gets.split.map(&:to_i) A = gets.split.map(&:to_i) AM = A.max values = Array.new(Math.log2(M).ceil + 10, 0) A.each do |a| cost = 1 e = a while e % P == 0 e /= P cost += 1 end next if e == 1 if values[cost] < e values[cost] = e end end L = Math.log2(M).ceil ** 2 + 10 dp = Array.new(L + 1, 0) dp[0] = 1 values.each.with_index do |e, cost| next if e == 0 0.upto(L) do |i| next if dp[i] == 0 next if dp[i] > M nv = i + cost x = dp[i] * e if dp[nv] < x dp[nv] = x end end end 0.upto(L) do |cost| if dp[cost] * AM > M puts cost + 1 exit end end puts -1