#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
mt19937 rnd(time(nullptr));
const int N = 1e5 + 5;
long long a[N], c1, c2, n, k;
long long cnt(long long l, long long r) {
  int it1 = lower_bound(a + 1, a + k + 1, l) - a;
  int it2 = upper_bound(a + 1, a + k + 1, r) - a - 1;
  return it2 - it1 + 1;
}
long long solve(long long l, long long r) {
  long long cur = cnt(l, r), len = r - l + 1;
  if (!cur) return c1;
  if (l == r) return c2 * cur;
  return min(c2 * cur * len, solve(l, l + len / 2 - 1) + solve(l + len / 2, r));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k >> c1 >> c2;
  for (int i = 1; i <= k; ++i) cin >> a[i];
  sort(a + 1, a + k + 1);
  cout << solve(1, (1LL << n));
}
