#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
using namespace std;
int a, b, c, d, n, m, k;
int mas[200002];
pair<int, int> fx[200002];
long long solve(int md) {
  multiset<long long> s1, s2;
  long long sum = 0;
  long long add1 = 0, add2 = 0;
  for (int _n((n)-1), i(0); i <= _n; i++) {
    int t = mas[i] % 5;
    fx[i].first = mas[i];
    fx[i].second = 0;
    while (t != md) {
      ++t;
      if (t == 5) t = 0;
      ++fx[i].first;
      fx[i].second += c;
    }
    fx[i].first /= 5;
  }
  auto upd = [&]() {
    while ((int)s1.size() > k) {
      long long t = *s1.rbegin() + add1;
      s1.erase(--s1.end());
      s2.insert(t - add2);
      sum -= t;
    }
    while (1) {
      if (s2.empty()) break;
      long long mn2 = *s2.begin() + add2;
      long long mx1 = *s1.rbegin() + add1;
      if (mn2 < mx1) {
        sum -= mx1;
        sum += mn2;
        s1.erase(--s1.end());
        s2.erase(s2.begin());
        s1.insert(mn2 + add1);
        s2.insert(mx1 + add2);
      } else
        break;
    }
  };
  long long ans = 8LL * 1000000000 * 1000000000;
  for (int _n((n)-1), i(0); i <= _n; i++) {
    s1.insert(fx[i].second - add1);
    sum += fx[i].second;
    upd();
    if (s1.size() == k && sum < ans) {
      ans = sum;
    }
    if (i == n - 1) break;
    long long delta = (long long)fx[i + 1].first - (long long)fx[i].first;
    add1 += (long long)delta * b;
    add2 += (long long)delta * b;
    sum += (long long)s1.size() * delta * b;
  }
  return ans;
}
int main() {
  scanf("%d%d%d%d", &n, &k, &b, &c);
  b = min(b, c * 5);
  for (int _n((n)-1), i(0); i <= _n; i++) {
    scanf("%d", &mas[i]);
  }
  sort(mas, mas + n);
  int mn = mas[0];
  for (int _n((n)-1), i(0); i <= _n; i++) {
    mas[i] -= mn;
  }
  long long ans = 8LL * 1000000000 * 1000000000;
  for (int _n((5) - 1), md(0); md <= _n; md++) {
    long long cur = solve(md);
    if (cur < ans) ans = cur;
  }
  cout << ans << endl;
}
