#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
long long n, k, a, b;
long long solve2(long long *ar, long long low, long long hi) {
  if (low == hi) {
    long long ele = 0;
    long long id = lower_bound(ar, ar + k, low) - ar;
    long long id2 = lower_bound(ar, ar + k, low + 1) - ar;
    ele = id2 - id;
    if (ele == 0) {
      return a;
    }
    return b * ele;
  }
  long long mid = (low + hi) / 2;
  long long ele1 = 0, ele2 = 0;
  long long id = lower_bound(ar, ar + k, low) - ar;
  long long id2 = lower_bound(ar, ar + k, mid + 1) - ar;
  ele1 = id2 - id;
  id = lower_bound(ar, ar + k, mid + 1) - ar;
  id2 = lower_bound(ar, ar + k, hi + 1) - ar;
  ele2 = id2 - id;
  long long tt = (ele1 + ele2) * (hi - low + 1) * b;
  if (tt == 0) return a;
  long long t2 = min(tt, (solve2(ar, low, mid) + solve2(ar, mid + 1, hi)));
  tt = min(tt, t2);
  return tt;
}
void solve() {
  cin >> n >> k >> a >> b;
  long long arr[k];
  for (int i = 0; i < k; i++) {
    cin >> arr[i];
  }
  sort(arr, arr + k);
  long long val1 = (1LL << n);
  long long ans = k * b * val1;
  ans = min(ans, solve2(arr, 1, val1));
  cout << ans << "\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int tc = 1;
  while (tc--) solve();
  return 0;
}
