#include <bits/stdc++.h>
using namespace std;
using lint = long long;
using ii = pair<int, int>;
using ll = pair<lint, lint>;
using ti = tuple<int, int, int>;
using il = pair<int, lint>;
using tl = tuple<lint, lint, lint>;
lint n, m, k;
const int N = 1e6 + 5;
lint a, b;
vector<int> v;
int get(int x, int y) {
  int r =
      upper_bound(v.begin(), v.end(), y) - lower_bound(v.begin(), v.end(), x);
  return r;
}
lint go(lint l, lint r) {
  lint re;
  if (l == r) {
    if (get(l, r) == 0) {
      re = a;
    } else {
      re = b * 1 * get(l, r);
    }
  } else {
    if (get(l, r) == 0) {
      re = a;
    } else {
      lint m = (l + r) / 2;
      re = (r - l + 1) * get(l, r) * b;
      re = min(re, go(l, m) + go(m + 1, r));
    }
  }
  return re;
}
void input() {
  scanf("%lld%lld%lld%lld", &n, &k, &a, &b);
  for (int i = 0; i < k; i++) {
    int x;
    scanf("%d", &x);
    v.push_back(x);
  }
  sort(v.begin(), v.end());
  lint ans = go(1LL, 1LL << n);
  printf("%lld\n", ans);
}
void go() {}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  input();
  go();
}
