#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
#pragma GCC optimize("fast-math")
#pragma warning(disable : 4996)
using namespace std;
const int MAXN = 200001;
const int inf = 1000000001;
const long double INF = 1.0 / 0.0;
const long double EPS = 1e-7;
const int mod = inf + 7;
const long double PI = acos(-1.0);
int ans = 0;
long long A, B;
vector<long long> pos;
long long amount(long long l) {
  long long x = upper_bound((pos).begin(), (pos).end(), l) - pos.begin();
  return (x == 0 ? 0 : x - 1);
}
long long cnt(long long l, long long r) {
  return upper_bound((pos).begin(), (pos).end(), r) -
         lower_bound((pos).begin(), (pos).end(), l);
}
long long rec(long long l, long long r) {
  if ((r - l + 1) % 2) {
    long long am = cnt(l, r);
    if (am) {
      return B * (r - l + 1) * am;
    }
    return A;
  } else {
    long long am = cnt(l, r);
    long long ansfs = (am == 0 ? A : B * am * (r - l + 1));
    if (!am) {
      return A;
    }
    long long ansss = rec(l, (l + r) / 2) + rec((l + r) / 2 + 1, r);
    return min(ansfs, ansss);
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  ;
  long long n, k;
  cin >> n >> k >> A >> B;
  for (long long i = 0; i < k; ++i) {
    long long x;
    cin >> x;
    pos.push_back(x);
  }
  sort((pos).begin(), (pos).end());
  cout << rec(1, 1 << n);
}
