#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const int mod = 998244353;
const int N = 1e5;
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
long long Abs(long long a) {
  if (a > 0) return a;
  return -a;
}
long long Ceil(long long a, long long b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
double Abs(double a) {
  if (a > 0) return a;
  return -a;
}
inline int pow_(long long x, long long y, long long p) {
  int r = 1;
  while (y) {
    if (y & 1) r = r * x % p;
    y >>= 1;
    x = x * x % p;
  }
  return r;
}
inline int inv_(int x) { return pow_(x, mod - 2, mod); }
inline int add(int a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
inline int mul(int a, int b) { return a * 1LL * b % mod; }
inline int sub(int a, int b) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
long long a[100005] = {0};
long long n, k, A, B;
long long rec(long long i, long long j) {
  long long id1 = lower_bound(a + 1, a + k + 1, i) - (a + 1);
  long long id2 = upper_bound(a + 1, a + k + 1, j) - (a + 1);
  id2 = k - id2;
  long long c = k - (id1 + id2);
  long long cost = 0;
  if (c > 0) {
    cost = B * (j - i + 1) * c;
  } else {
    cost = A;
  }
  if (j == i) {
    return cost;
  } else {
    long long length = (j - i + 1);
    length /= 2;
    if (c > 0) {
      return min(rec(i, i + length - 1) + rec(i + length, j), cost);
    } else {
      return cost;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> k >> A >> B;
  for (int i = 1; i <= k; i++) {
    cin >> a[i];
  }
  sort(a + 1, a + k + 1);
  long long p = pow(2, n);
  long long ans = rec(1, p);
  cout << ans << "\n";
  return 0;
}
