#include <bits/stdc++.h>
using namespace std;
unsigned long long gcd(unsigned long long a, unsigned long long b) {
  return (b == 0 ? a : gcd(b, a % b));
}
vector<unsigned long long> v;
unsigned long long solve(unsigned long long l, unsigned long long r,
                         unsigned long long a, unsigned long long b) {
  unsigned long long ans;
  unsigned long long na =
      upper_bound(v.begin(), v.end(), r) - lower_bound(v.begin(), v.end(), l);
  if (na == 0) {
    ans = a;
    return ans;
  } else
    ans = na * b * (r - l + 1);
  if (l == r) return ans;
  unsigned long long tmp1 = solve(l, l + (r - l - 1) / 2, a, b);
  unsigned long long tmp2 = solve(l + (r - l - 1) / 2 + 1, r, a, b);
  ans = min(ans, tmp1 + tmp2);
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  unsigned long long n, k, a, b;
  cin >> n >> k >> a >> b;
  for (unsigned long long i = 0; i < k; i++) {
    unsigned long long x;
    cin >> x;
    v.push_back(x);
  }
  unsigned long long l = 1;
  unsigned long long r = pow(2, n);
  sort(v.begin(), v.end());
  cout << solve(l, r, a, b);
  return 0;
}
