#include <bits/stdc++.h>
using namespace std;
class Debugger {
 public:
  Debugger(const std::string& _separator = ", ")
      : first(true), separator(_separator) {}
  template <typename ObjectType>
  Debugger& operator,(const ObjectType& v) {
    if (!first) cerr << separator;
    cerr << v;
    first = false;
    return *this;
  }
  ~Debugger() { cerr << "\n"; }

 private:
  bool first;
  string separator;
};
template <typename T1, typename T2>
inline ostream& operator<<(std::ostream& os, const std::pair<T1, T2>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
inline ostream& operator<<(ostream& os, const vector<T>& v) {
  bool first = true;
  os << "[";
  for (unsigned long long i = 0; i < v.size(); i++) {
    if (!first) os << ", ";
    os << v[i];
    first = false;
  }
  return os << "]";
}
template <typename T>
inline ostream& operator<<(ostream& os, const set<T>& v) {
  bool first = true;
  os << "[";
  for (typename set<T>::const_iterator ii = v.begin(); ii != v.end(); ++ii) {
    if (!first) os << ", ";
    os << *ii;
    first = false;
  }
  return os << "]";
}
template <typename T1, typename T2>
inline ostream& operator<<(ostream& os, const map<T1, T2>& v) {
  bool first = true;
  os << "[";
  for (typename map<T1, T2>::const_iterator ii = v.begin(); ii != v.end();
       ++ii) {
    if (!first) os << ", ";
    os << *ii;
    first = false;
  }
  return os << "]";
}
long long n, k, a, b;
long long massiv[100010];
long long findd(long long nac, long long konec, long long n) {
  return upper_bound(massiv + 1, massiv + 1 + n, konec) -
         lower_bound(massiv + 1, massiv + 1 + n, nac);
}
long long f(long long nac, long long konec, long long n) {
  long long oo = findd(nac, konec, n);
  if (oo == 0) return a;
  if (nac == konec) return b * oo * (konec - nac + 1);
  long long mid = (konec - nac + 1) / 2;
  long long one = f(nac, nac + mid - 1, n);
  long long two = f(nac + mid, konec, n);
  return min(one + two, b * findd(nac, konec, n) * (konec - nac + 1));
}
int main() {
  ios_base::sync_with_stdio(0);
  ;
  cin >> n >> k >> a >> b;
  for (long long i = 1; i <= k; i++) {
    cin >> massiv[i];
  }
  sort(massiv + 1, massiv + (k + 1));
  long long raz = (1LL << n);
  cout << f(1, raz, k) << "\n";
  return 0;
}
