#include <bits/stdc++.h>
using namespace std;
int n, k, A, B, avng;
int bases[100005];
inline int many(int l, int r) {
  int mid, left = 1, right = k, lastr = 0;
  while (left <= right) {
    mid = left + (right - left) / 2;
    if (bases[mid] > r)
      right = mid - 1;
    else {
      lastr = mid;
      left = mid + 1;
    }
  }
  int lastl = k + 1;
  left = 1;
  right = k;
  while (left <= right) {
    mid = left + (right - left) / 2;
    if (bases[mid] < l)
      left = mid + 1;
    else {
      lastl = mid;
      right = mid - 1;
    }
  }
  if (lastl <= lastr) return lastr - lastl + 1;
  return 0;
}
long long burn(int l, int r) {
  avng = many(l, r);
  if (avng == 0) return A;
  long long cans =
      (long long)avng * (long long)B * ((long long)r - (long long)l + 1);
  if (r - l == 0) return cans;
  return min(cans,
             burn(l, r - (r - l + 1) / 2) + burn(r - (r - l + 1) / 2 + 1, r));
}
int main() {
  cin >> n >> k >> A >> B;
  for (int i = 1; i <= k; ++i) cin >> bases[i];
  sort(bases + 1, bases + k + 1);
  long long ans = burn(1, 1 << n);
  cout << ans;
  return 0;
}
