#include <bits/stdc++.h>
using namespace std;
vector<long long> revs;
long long n, A, B;
long long dfs(long long l, long long r) {
  long long ans, mid = (l + r) / 2;
  if (l > r) return 0;
  auto up = upper_bound(revs.begin(), revs.end(), r);
  auto low = lower_bound(revs.begin(), revs.end(), l);
  if (up - low == 0) {
    return A;
  }
  ans = B * (up - low) * (r - l + 1);
  if (l < r) ans = min(ans, dfs(l, mid) + dfs(mid + 1, r));
  return ans;
}
int main() {
  long long k, ai;
  cin >> n >> k >> A >> B;
  while (k--) {
    cin >> ai, revs.push_back(ai);
  }
  sort(revs.begin(), revs.end());
  cout << dfs(1, 1 << n) << endl;
  return 0;
}
