#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int n, k;
long long A, B;
long long a[maxn];
long long dfs(long long l, long long r) {
  long long val = upper_bound(a, a + k, r) - lower_bound(a, a + k, l);
  if (val == 0) return A;
  if (l == r) return val * B;
  long long mid = (l + r) >> 1;
  long long left = dfs(l, mid), right = dfs(mid + 1, r);
  return min(left + right, (val)*B * (r - l + 1));
}
int main() {
  while (cin >> n >> k >> A >> B) {
    for (int i = 0; i < k; i++) {
      scanf("%lld", &a[i]);
    }
    sort(a, a + k);
    long long ans = dfs(1, (long long)pow(2, n));
    printf("%lld\n", ans);
  }
}
