#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
const long long INF = 2e18;
int n, k, b, c;
long long t[N];
vector<long long> pos[5];
queue<long long> val[5];
long long cal(long long x, long long y) {
  return (y - x) / 5 * b + ((y - x) % 5) * c;
}
int main() {
  while (scanf("%d%d%d%d", &n, &k, &b, &c) == 4) {
    b = min(b, c * 5);
    for (int i = 0; i < 5; i++) pos[i].clear();
    for (int i = 0; i < n; i++) {
      scanf("%I64d", &t[i]);
      for (int j = 0; j < 5; j++) {
        pos[((t[i] + j) % 5 + 5) % 5].push_back(t[i] + j);
      }
    }
    sort(t, t + n);
    long long ans = INF;
    for (int i = 0; i < 5; i++) {
      sort(pos[i].begin(), pos[i].end());
      for (int j = 0; j < 5; j++) {
        while (!val[j].empty()) val[j].pop();
      }
      long long cur = 0;
      int w = 0;
      for (int j = 0, sz = pos[i].size(); j < sz; j++) {
        if (j) cur += b * min(w, k) * (pos[i][j] - pos[i][j - 1]) / 5;
        while (w < n && t[w] <= pos[i][j]) {
          cur += cal(t[w], pos[i][j]);
          val[(t[w] % 5 + 5) % 5].push(t[w]);
          w++;
          if (w > k) {
            long long tmp = 0;
            for (int p = 0; p < 5; p++) {
              if (!val[p].empty())
                tmp = max(tmp, cal(val[p].front(), pos[i][j]));
            }
            for (int p = 0; p < 5; p++) {
              if (!val[p].empty() && cal(val[p].front(), pos[i][j]) == tmp) {
                cur -= tmp;
                val[p].pop();
                break;
              }
            }
          }
        }
        if (w >= k) {
          ans = min(ans, cur);
        }
      }
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
