#include <bits/stdc++.h>
#pragma GCC optimize("03")
using namespace std;
namespace khalid007 {
int_least64_t mpow(int_least64_t a, int_least64_t b,
                   int_least64_t m = 1000000007) {
  int_least64_t answer = 1;
  while (b) {
    if (b & 1) answer = (answer * a) % m;
    b >>= 1;
    a = (a * a) % m;
  }
  return answer;
}
int_least64_t pow(int_least64_t a, int_least64_t b) {
  int_least64_t answer = 1;
  while (b) {
    if (b & 1) answer = (answer * a);
    b >>= 1;
    a = (a * a);
  }
  return answer;
}
}  // namespace khalid007
int_least64_t n, k, A, B, temp;
vector<int_least64_t> a;
int_least64_t recur(int_least64_t l, int_least64_t r) {
  int_least64_t cnt_Avenger =
      lower_bound(a.begin(), a.end(), r) - lower_bound(a.begin(), a.end(), l);
  int_least64_t ans, mid = (l + r) >> 1;
  if (cnt_Avenger)
    ans = cnt_Avenger * (r - l) * B;
  else
    ans = A;
  if (cnt_Avenger == 0 || (r - l) == 1) return ans;
  ans = min(ans, recur(l, mid) + recur(mid, r));
  return ans;
}
void solve() {
  cin >> n >> k >> A >> B;
  for (int_least64_t i = 0; i < k; i++) {
    cin >> temp;
    a.emplace_back(temp - 1);
  }
  sort(a.begin(), a.end());
  cout << recur(0, 1LL << n);
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int_least64_t TEST_CASE = 1;
  while (TEST_CASE--) solve();
}
