#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
long long n, k, a, b;
long long c[maxn];
long long dfs(long long l, long long r) {
  long long tp =
      upper_bound(c + 1, c + 1 + k, r) - lower_bound(c + 1, c + 1 + k, l);
  if (!tp) return a;
  if (l == r) return b * tp;
  return min(1LL * b * tp * (r - l + 1),
             dfs(l, (l + r) / 2) + dfs((l + r) / 2 + 1, r));
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &k, &a, &b);
  for (int i = 1; i <= k; i++) scanf("%lld", &c[i]);
  sort(c + 1, c + 1 + k);
  long long temp = dfs(1, 1ll << n);
  printf("%lld\n", temp);
  return 0;
}
