#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int A[N], B[N];
int c[N];
multiset<int> S, T;
vector<int> both, onlyA, onlyB, none;
int n, m, k, l, pick;
long long s_sum, w_sum;
bool bad = 0;
void balance() {
  bad = 0;
  while ((int)S.size() < pick) {
    if (T.empty()) {
      bad = 1;
      return;
    }
    s_sum += *T.begin();
    S.insert(*T.begin());
    T.erase(T.begin());
  }
  while (pick >= 0 && (int)S.size() > pick) {
    s_sum -= *S.rbegin();
    T.insert(*S.rbegin());
    S.erase(prev(S.end()));
  }
}
void tryremove(int x) {
  if (T.find(x) != T.end()) {
    T.erase(T.find(x));
  } else if (S.find(x) != S.end()) {
    s_sum -= x;
    S.erase(S.find(x));
  } else {
  }
}
int main(void) {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &c[i]);
  int ka, kb, x;
  scanf("%d", &ka);
  for (int i = 0; i < ka; i++) {
    scanf("%d", &x);
    A[x] = 1;
  }
  scanf("%d", &kb);
  for (int i = 0; i < kb; i++) {
    scanf("%d", &x);
    B[x] = 1;
  }
  for (int i = 1; i <= n; i++)
    if (A[i] && B[i]) {
      both.push_back(c[i]);
    } else if (A[i])
      onlyA.push_back(c[i]);
    else if (B[i])
      onlyB.push_back(c[i]);
    else
      none.push_back(c[i]);
  sort(both.begin(), both.end());
  sort(onlyA.begin(), onlyA.end());
  sort(onlyB.begin(), onlyB.end());
  sort(none.begin(), none.end());
  l = min((int)both.size(), k);
  for (int i = 0; i < l; i++) w_sum += both[i];
  for (int i = l; i < (int)both.size(); i++) T.insert(both[i]);
  if (onlyA.size() < k - l || onlyB.size() < k - l) {
    puts("-1");
    return 0;
  }
  for (int i = 0; i < k - l; i++) w_sum += onlyA[i];
  for (int i = k - l; i < (int)onlyA.size(); i++) T.insert(onlyA[i]);
  for (int i = 0; i < k - l; i++) w_sum += onlyB[i];
  for (int i = k - l; i < (int)onlyB.size(); i++) T.insert(onlyB[i]);
  for (int i = 0; i < (int)none.size(); i++) T.insert(none[i]);
  const long long INF = (1LL << 60);
  long long ans = INF;
  while (l >= 0) {
    pick = m - (l + 2 * (k - l));
    balance();
    if (!bad && pick >= 0) {
      ans = min(ans, s_sum + w_sum);
    }
    if (l > 0) {
      w_sum -= both[l - 1];
      T.insert(both[l - 1]);
      if (onlyA.size() <= k - l || onlyB.size() <= k - l) break;
      w_sum += onlyA[k - l];
      w_sum += onlyB[k - l];
      tryremove(onlyA[k - l]);
      tryremove(onlyB[k - l]);
    }
    --l;
  }
  if (ans == INF) ans = -1;
  cout << ans << endl;
  return 0;
}
