#include <bits/stdc++.h>
using namespace std;
long long n, m, i, j, l, r, k, kol, A, B, len = pow(2, 30);
vector<long long> b;
map<long long, long long> f, t, o;
long long rec(long long l, long long r, long long kol) {
  if (kol == 0) return A;
  if (l == r) {
    if (t[l])
      return B * t[l];
    else
      return A;
  }
  long long w = (l + r) / 2, z = 0;
  long long lr = upper_bound(b.begin(), b.end(), l - 1) - b.begin(),
            rr = upper_bound(b.begin(), b.end(), r) - b.begin(),
            cr = upper_bound(b.begin(), b.end(), w) - b.begin();
  if (kol)
    z = kol * B * (r - l + 1);
  else
    z = A;
  return min(rec(l, w, max(cr - lr, 0ll)) + rec(w + 1, r, max(rr - cr, 0ll)),
             z);
}
int main() {
  cin >> n >> k >> A >> B;
  len = pow(2, n);
  b.push_back(0);
  for (int i = 0; i < k; i++) {
    long long x;
    cin >> x;
    b.push_back(x);
    t[x]++;
  }
  sort(b.begin(), b.end());
  b.push_back(1e18);
  long long p = 0;
  cout << rec(1, pow(2, n), k);
  return 0;
}
