from bisect import bisect as bs def main(): n, m, a, b = list(map(int, input().split())) A = list(map(int, input().split())) A.sort() X = set() for i in range(1, n+1): if i*i > n: break if not i in A: X.add(i) if not n//i in A: X.add(n//i) X = list(X) X.sort() N = len(X) inf = 1<<60 dp = [inf] * N dp[0] = -b for i in range(N-1): dp[i] += b Y = [a for a in A if not a % X[i]] for j in range(i+1, N): if X[j] % X[i]: continue if bs(Y, X[i]) != bs(Y, X[j]): continue dp[j] = min(dp[j], dp[i]+(X[j]//X[i]-1)*a) #print(dp) return dp[-1] if dp[-1] < inf else -1 print(main())