#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline void chkmin(T1 &first, T2 second) {
  if (first > second) first = second;
}
template <typename T1, typename T2>
inline void chkmax(T1 &first, T2 second) {
  if (first < second) first = second;
}
const string FileName = "input";
const int MAXN = 3e5 + 100;
int n, k, b, c;
vector<int> arr;
vector<int> event[5];
long long sum, mod, ans = 1e18;
multiset<long long> que;
long long f(long long s, long long t) {
  return ((t - s) / 5) * b + ((t - s) % 5) * c;
}
int main(int argc, char const *argv[]) {
  srand(time(0));
  ios::sync_with_stdio(0);
  cin >> n >> k >> b >> c;
  arr.resize(n);
  b = min(b, c * 5);
  for (int i = 0; i < n; ++i) {
    cin >> arr[i];
  }
  sort(arr.begin(), arr.end());
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < 5; ++j) {
      event[(((arr[i] + j) % 5) + 5) % 5].push_back(arr[i] + j);
    }
  }
  for (int j = 0; j < 5; ++j) {
    int L = 0;
    sum = 0, mod = 0;
    que.clear();
    for (int i = 0; i < n; ++i) {
      while (L < n && arr[L] <= event[j][i]) {
        que.insert(-f(arr[L], event[j][i]) - mod);
        sum += f(arr[L], event[j][i]);
        ++L;
      }
      while (que.size() > k) {
        sum += *que.begin() + mod;
        que.erase(que.begin());
      }
      if (que.size() == k) {
        ans = min(ans, sum);
      }
      if (i != n - 1) {
        assert(event[j][i] <= event[j][i + 1]);
        mod -= f(event[j][i], event[j][i + 1]);
        sum += f(event[j][i], event[j][i + 1]) * que.size();
      }
    }
  }
  cout << ans << endl;
}
