#include <bits/stdc++.h>
#pragma GCC optimize("O3")
std::pair<int, int> DR[] = {{-1, 0}, {0, 1},   {1, 0}, {0, -1},
                            {-1, 1}, {-1, -1}, {1, 1}, {1, -1}};
using namespace std;
vector<long long> vec;
long long n, k, A, B;
inline long long cnt(long long l, long long r) {
  return upper_bound(vec.begin(), vec.end(), r) -
         lower_bound(vec.begin(), vec.end(), l);
}
inline long long f(long long l, long long r) {
  long long x = cnt(l, r);
  if (!x) return A;
  if (l == r) return B * x;
  long long ans = B * x * (r - l + 1);
  ans = min(ans, f(l, (l + r) / 2) + f((l + r) / 2 + 1, r));
  return ans;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cerr.tie(0);
  cout.tie(0);
  cin >> n >> k >> A >> B;
  for (long long i = 1; i <= k; i++) {
    long long x;
    cin >> x;
    vec.push_back(x);
  }
  sort(vec.begin(), vec.end());
  return cout << f(1, (1 << n)), 0;
}
