#include <bits/stdc++.h>
const double eps = (1e-9);
using namespace std;
int dcmp(long double a, long double b) {
  return fabsl(a - b) <= eps ? 0 : (a > b) ? 1 : -1;
}
int getBit(int num, int idx) { return ((num >> idx) & 1) == 1; }
int setBit1(int num, int idx) { return num | (1 << idx); }
long long setBit0(long long num, int idx) { return num & ~(1ll << idx); }
long long flipBit(int num, int idx) { return num ^ (1 << idx); }
void FS() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
long long n, k, A, B;
vector<long long> v;
long long inf = 1e15;
long long query(long long l, long long r) {
  return upper_bound(((v).begin()), ((v).end()), r) -
         lower_bound(((v).begin()), ((v).end()), l);
}
long long solve(long long l, long long r) {
  long long p1, p2;
  long long people = query(l, r);
  long long len = (r - l + 1);
  if (people == 0) {
    return A;
  }
  if (l < r) {
    long long mid = (l + r) / 2;
    p1 = solve(l, mid) + solve(mid + 1, r);
  } else {
    p1 = B * people;
  }
  p2 = B * people * len;
  return min(p1, p2);
}
int main() {
  FS();
  cin >> n >> k >> A >> B;
  for (int i = 0; i < k; i++) {
    long long no;
    cin >> no;
    v.push_back(no);
  }
  sort(((v).begin()), ((v).end()));
  cout << solve(1ll, (1ll << n)) << endl;
}
