#include <bits/stdc++.h>
using namespace std;
void MAIN();
int main() {
  MAIN();
  return 0;
}
const int N = 2e5 + 32;
int n, m, k;
array<int, N> cost, type;
priority_queue<int, vector<int>, greater<int> > ab, rem;
priority_queue<int> q[2], hate;
void MAIN() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < (int)(n); i++) scanf("%d", &cost[i]);
  for (int i = 0; i < (int)(2); i++) {
    int id, cnt;
    scanf("%d", &cnt);
    while (cnt--) {
      scanf("%d", &id);
      id--;
      type[id] |= 1 << i;
    }
  }
  long long ans = 1LL << 60, sum = 0;
  for (int i = 0; i < (int)(n); i++) {
    if (type[i] == 3)
      ab.push(cost[i]);
    else if (type[i] == 1) {
      q[0].push(cost[i]);
      sum += cost[i];
    } else if (type[i] == 2) {
      q[1].push(cost[i]);
      sum += cost[i];
    } else
      rem.push(cost[i]);
  }
  int xx = ab.size();
  for (int t = 0; t <= m && t <= xx; t++) {
    for (int i = 0; i < (int)(2); i++) {
      while (!q[i].empty() && q[i].size() > k - t) {
        rem.push(q[i].top());
        sum -= q[i].top();
        q[i].pop();
      }
    }
    while (t + q[0].size() + q[1].size() + hate.size() < m) {
      if (rem.empty()) break;
      hate.push(rem.top());
      sum += rem.top();
      rem.pop();
    }
    while (t + q[0].size() + q[1].size() + hate.size() > m) {
      if (hate.empty()) break;
      rem.push(hate.top());
      sum -= hate.top();
      hate.pop();
    }
    while (!rem.empty() && !hate.empty() && rem.top() < hate.top()) {
      int u = rem.top(), v = hate.top();
      rem.pop();
      hate.pop();
      rem.push(v);
      hate.push(u);
      sum += u - v;
    }
    if (q[0].size() + t >= k && q[1].size() + t >= k &&
        t + q[0].size() + q[1].size() + hate.size() == m) {
      ((ans) > (sum) ? (ans) = (sum), 1 : 0);
    }
    if (!ab.empty()) {
      sum += ab.top();
      ab.pop();
    }
  }
  if (ans == 1LL << 60)
    printf("-1\n");
  else
    cout << ans << "\n";
}
