#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1e7 + 10);
long long n, k, A, B;
map<long long, bool> vis;
map<int, map<int, long long> > dp;
vector<int> ve;
int arr[MAXN];
long long dfs(int left, int right) {
  long long sum = 0;
  long long y = 0;
  int cnt = 0;
  int mid = (left + right) / 2;
  int len = (right - left + 1);
  cnt = upper_bound(ve.begin(), ve.end(), right) -
        lower_bound(ve.begin(), ve.end(), left);
  if (cnt)
    y += (B * cnt * len);
  else
    y += A;
  if (len % 2 == 0) {
    long long x = dfs(left, mid);
    if (x >= y) {
      sum += y;
    } else {
      x += dfs(mid + 1, right);
      sum += min(x, y);
    }
  } else {
    sum += y;
  }
  return sum;
}
void solve() {
  for (long long i = 0; i < k; i++) {
    long long x;
    cin >> x;
    ve.push_back(x);
  }
  sort(ve.begin(), ve.end());
  long long p = powl(2, n);
  cout << dfs(1, p) << endl;
}
int main() {
  cin >> n >> k >> A >> B;
  solve();
  return 0;
}
