def factorize(n):
    factors = {}
    while n % 2 == 0:
        factors[2] = factors.get(2, 0) + 1
        n = n // 2
    i = 3
    while i * i <= n:
        while n % i == 0:
            factors[i] = factors.get(i, 0) + 1
            n = n // i
        i += 2
    if n > 1:
        factors[n] = 1
    return factors

def generate_divisors(factors):
    divisors = [1]
    for p, exp in factors.items():
        current_length = len(divisors)
        p_pows = []
        for e in range(1, exp + 1):
            p_pows.append(p ** e)
        for pow_p in p_pows:
            for i in range(current_length):
                divisors.append(divisors[i] * pow_p)
    return sorted(divisors)

def main():
    import sys
    input = sys.stdin.read().split()
    idx = 0
    N = int(input[idx]); idx +=1
    M = int(input[idx]); idx +=1
    A = int(input[idx]); idx +=1
    B = int(input[idx]); idx +=1
    C = list(map(int, input[idx:idx+M]))
    forbidden_set = set(C)
    if N == 1:
        print(-1)
        return
    
    factors = factorize(N)
    divisors = generate_divisors(factors)
    if N not in divisors:
        divisors.append(N)
    divisors = sorted(divisors)
    
    dp = {d: float('inf') for d in divisors}
    dp[1] = 0
    
    for d in divisors:
        if d == 1:
            continue
        possible_prevs = [prev for prev in divisors if prev < d and d % prev == 0]
        for prev in possible_prevs:
            s = d // prev
            if s < 2:
                continue
            invalid = False
            for c in C:
                if c % prev != 0:
                    continue
                q = c // prev
                if 2 <= q <= s:
                    invalid = True
                    break
            if not invalid:
                if dp[prev] + (s-1)*A + B < dp[d]:
                    dp[d] = dp[prev] + (s-1)*A + B
    
    min_cost = float('inf')
    for d in divisors:
        if d >= N:
            continue
        if N % d != 0:
            continue
        k = (N // d) - 1
        if k < 0:
            continue
        invalid = False
        for c in C:
            if c < d * 2:
                continue
            if c > d * k:
                continue
            if c % d == 0:
                invalid = True
                break
        if not invalid:
            total_cost = dp[d] + k * A
            if total_cost < min_cost:
                min_cost = total_cost
    
    print(-1 if min_cost == float('inf') else min_cost)

if __name__ == '__main__':
    main()