#include <bits/stdc++.h>
using namespace std;
int n, m, k, a[200002], t, t1, p, fix[200002], l, r, mid;
vector<long long> b[4], c[4];
long long ans;
int get(int ind, int L, int X) {
  int l = L + 1, r = b[ind].size() - 1, ret = L;
  while (l <= r) {
    int mi = (l + r) / 2;
    if (b[ind][mi] <= X) {
      ret = mi;
      l = mi + 1;
    } else
      r = mi - 1;
  }
  return ret;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) cin >> a[i];
  cin >> t;
  for (int i = 0; i < t; i++) cin >> p, fix[p]++;
  cin >> t1;
  for (int i = 0; i < t1; i++) cin >> p, fix[p] += 2;
  for (int i = 1; i <= n; i++) b[fix[i]].push_back(a[i]);
  sort(a + 1, a + n + 1);
  for (int i = 0; i < 4; i++) {
    b[i].push_back(0);
    c[i].push_back(0);
    sort(b[i].begin(), b[i].end());
    for (int j = 1; j < b[i].size(); j++) c[i].push_back(c[i][j - 1] + b[i][j]);
  }
  ans = -1;
  for (int i = 0; i < b[3].size(); i++) {
    int _12 = max(0, k - i);
    if (_12 >= b[1].size() || _12 >= b[2].size()) continue;
    int A = m - (i + 2 * _12);
    if (A < 0) continue;
    if (b[1].size() - 1 + b[2].size() - 1 + b[0].size() - 1 - 2 * (_12) < A)
      continue;
    l = 1;
    r = n;
    int X = 0;
    while (l <= r) {
      mid = (l + r) / 2;
      int R = get(1, _12, a[mid]) + get(2, _12, a[mid]) + get(0, 0, a[mid]) -
              2 * _12;
      if (R < A)
        l = mid + 1;
      else {
        r = mid - 1;
        X = a[mid];
      }
    }
    int a1 = get(1, _12, X);
    int a2 = get(2, _12, X);
    int a0 = get(0, 0, X);
    int Z = a1 + a2 + a0 - 2 * _12 - A;
    long long now = c[0][a0] + c[1][a1] + c[2][a2] + c[3][i] - 1LL * Z * X;
    if (ans == -1 || ans > now) ans = now;
  }
  cout << ans << endl;
}
