#include <bits/stdc++.h>
using namespace std;
template <class T>
int getbit(T s, int i) {
  return (s >> i) & 1;
}
template <class T>
T onbit(T s, int i) {
  return s | (T(1) << i);
}
template <class T>
T offbit(T s, int i) {
  return s & (~(T(1) << i));
}
template <class T>
int cntbit(T s) {
  return __builtin_popcount(s);
}
template <class T>
inline T gcd(T a, T b) {
  T r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long n, k, A, B;
long long a[100005];
long long get(long long b) { return 1 << b; }
long long solve(long long dau, long long cuoi, long long ad, long long ac,
                long long to) {
  if (to == 0) return A;
  if (dau == cuoi) {
    return B * to;
  }
  long long dai = cuoi - dau + 1;
  long long giua = dau + dai / 2 - 1;
  long long res = B * dai * to;
  long long t = upper_bound(a + ad, a + ac + 1, giua) - a;
  if (t == ac + 1) {
    res = min(res, solve(dau, giua, ad, ac, to) + A);
  } else if (t == ad) {
    res = min(res, A + solve(giua + 1, cuoi, ad, ac, to));
  } else {
    long long tmp = ac - t + 1;
    res = min(res, solve(dau, giua, ad, t - 1, to - tmp) +
                       solve(giua + 1, cuoi, t, ac, tmp));
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k >> A >> B;
  for (long long i = 1, _b = k; i <= _b; i++) cin >> a[i];
  sort(a + 1, a + k + 1);
  long long res = solve(get(0), get(n), 1, k, k);
  cout << res << "\n";
  return 0;
}
