#include <bits/stdc++.h>
using namespace std;
long long n, k, a, b;
vector<long long> avengers;
long long avenger_count(long long lo, long long hi) {
  return lower_bound(avengers.begin(), avengers.end(), hi) -
         lower_bound(avengers.begin(), avengers.end(), lo);
}
long long kill_cost(long long lo, long long hi) {
  long long count = avenger_count(lo, hi);
  return count == 0 ? a : b * count * (hi - lo);
}
long long cost(long long lo, long long hi) {
  if (hi - lo == 1 || avenger_count(lo, hi) == 0) return kill_cost(lo, hi);
  long long mid = (lo + hi) / 2;
  return min(kill_cost(lo, hi), cost(lo, mid) + cost(mid, hi));
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &k, &a, &b);
  avengers.resize(k);
  for (int i = 0; i < k; i++) scanf("%lld", &avengers[i]);
  sort(avengers.begin(), avengers.end());
  printf("%lld\n", cost(1LL, (1LL << n) + 1));
}
