#include <bits/stdc++.h>
using namespace std;
void print_pair(pair<long long, long long> a) {
  cerr << "(" << a.first << ", " << a.second << ") ";
}
template <int T1, int T2>
void print_2d(int a[T1][T2], int x, int y) {
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
      cerr << a[i][j] << " ";
    }
    cerr << endl;
  }
}
template <class T>
void print_array(T a[], size_t n) {
  cerr << "array:";
  for (int i = 0; i < n - 1; i++) cerr << a[i] << ",";
  cerr << a[n - 1] << endl;
}
long long n, k, A, B;
long long a[100000];
map<long long, long long> heros;
pair<long long, long long> solve(long long l, long long r) {
  if (r == l) {
    if (heros.count(r)) {
      return {B * heros[r], heros[r]};
    } else {
      return {A, 0};
    }
  }
  if (heros.lower_bound(l) == heros.lower_bound(r) && !heros.count(r)) {
    return {A, 0};
  };
  ;
  long long length = r - l + 1;
  pair<long long, long long> ret = solve(l, l + length / 2 - 1);
  long long ans = ret.first;
  long long sum = ret.second;
  ret = solve(l + length / 2, r);
  sum += ret.second;
  ;
  ans = ret.first + ans;
  ;
  ans = min(ans, B * length * sum);
  ;
  return {ans, sum};
}
int main() {
  cin >> n >> k >> A >> B;
  for (int i = 0; i < k; i++) cin >> a[i];
  for (int i = 0; i < k; i++) {
    if (heros.count(a[i])) {
      heros[a[i]]++;
    } else {
      heros[a[i]] = 1;
    }
  }
  cout << solve(1LL, 1LL << n).first << endl;
  return 0;
}
