#include <bits/stdc++.h>
using namespace std;
vector<long long> a;
long long AP, BP;
long long f(long long l, long long r) {
  long long amount = upper_bound(a.begin(), a.end(), r - 1) -
                     lower_bound(a.begin(), a.end(), l);
  if (l == r - 1) {
    if (!amount) {
      return AP;
    } else {
      return BP * amount;
    }
  }
  if (amount == 0) {
    return AP;
  } else {
    return min(BP * (r - l) * amount, f(l, (l + r) >> 1) + f((l + r) >> 1, r));
  }
}
int main() {
  int n, k;
  ios::sync_with_stdio(0);
  cin >> n >> k >> AP >> BP;
  a.resize(k);
  for (int i = 0; i < k; i++) {
    cin >> a[i];
    a[i]--;
  }
  sort(a.begin(), a.end());
  cout << f(0, (1 << n)) << endl;
  return 0;
}
