#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
inline int rd() {
  int x = 0;
  char c = getchar();
  bool f = false;
  while (!isdigit(c)) {
    if (c == '-') f = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  return f ? -x : x;
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
int sqr(int x) { return x * x; }
int n, k;
int A, B;
int a[1000005];
long long dfs(long long l, long long r) {
  long long L = lower_bound(a + 1, a + 1 + k, l) - a;
  long long R = upper_bound(a + 1, a + 1 + k, r) - a;
  R--;
  long long tot = R - L + 1;
  long long cost = 0;
  if (tot == 0)
    cost = A;
  else
    cost = B * (r - l + 1) * tot;
  if (l == r || tot == 0) return cost;
  long long mid = (l + r) >> 1;
  return min(cost, dfs(l, mid) + dfs(mid + 1, r));
}
int main() {
  scanf("%d", &n);
  scanf("%d", &k);
  scanf("%d", &A);
  scanf("%d", &B);
  for (int i = 1; i <= k; i++) scanf("%d", &a[i]);
  sort(a + 1, a + 1 + k);
  long long x = (long long)(1 << n);
  cout << (long long)dfs(1, x) << endl;
  return 0;
}
