#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const double eps = 1e-9;
const int N = 2e5 + 10;
int cost[N];
int like[N];
set<pair<int, int> > first;
set<pair<int, int> > need;
set<pair<int, int> > want;
long long sum = 0;
void addN(pair<int, int> p) {
  need.insert(p);
  sum += p.first;
}
void delN(pair<int, int> p) {
  need.erase(p);
  sum -= p.first;
}
void addW(pair<int, int> p) {
  want.insert(p);
  sum += p.first;
}
void delW(pair<int, int> p) {
  want.erase(p);
  sum -= p.first;
}
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; (i) < (n); ++i) scanf("%d", &cost[i]);
  int xa;
  scanf("%d", &xa);
  for (int i = 0; (i) < (xa); ++i) {
    int x;
    scanf("%d", &x);
    --x;
    like[x] |= 1;
  }
  int xb;
  scanf("%d", &xb);
  for (int i = 0; (i) < (xb); ++i) {
    int x;
    scanf("%d", &x);
    --x;
    like[x] |= 2;
  }
  vector<pair<int, int> > v[4];
  for (int i = 0; (i) < (n); ++i) v[like[i]].push_back({cost[i], i});
  for (int i = 0; (i) < (4); ++i) sort((v[i]).begin(), v[i].end());
  for (int i = 0; (i) < (((int)(v[0]).size())); ++i) first.insert(v[0][i]);
  for (int i = k; i < ((int)(v[1]).size()); ++i) first.insert(v[1][i]);
  for (int i = k; i < ((int)(v[2]).size()); ++i) first.insert(v[2][i]);
  for (int i = 0; i < ((int)(v[3]).size()); ++i) first.insert(v[3][i]);
  sum = 0;
  long long res = INF;
  for (int i = 0; (i) < (min(k, ((int)(v[1]).size()))); ++i) addN(v[1][i]);
  for (int i = 0; (i) < (min(k, ((int)(v[2]).size()))); ++i) addN(v[2][i]);
  for (int cnt = 0; cnt <= min(k, ((int)(v[3]).size())); ++cnt) {
    if (cnt) {
      int dontNeed = k - cnt;
      if (dontNeed < ((int)(v[1]).size())) {
        delN(v[1][dontNeed]);
        first.insert(v[1][dontNeed]);
      }
      if (dontNeed < ((int)(v[2]).size())) {
        delN(v[2][dontNeed]);
        first.insert(v[2][dontNeed]);
      }
      pair<int, int> z = v[3][cnt - 1];
      addN(z);
      if (want.find(z) != want.end()) {
        delW(z);
      }
      if (first.find(z) != first.end()) {
        first.erase(z);
      }
    }
    if (((int)(need).size()) != k + k - cnt) continue;
    while (((int)(need).size()) + ((int)(want).size()) < m) {
      pair<int, int> z = *first.begin();
      first.erase(first.begin());
      addW(z);
    }
    if (((int)(need).size()) + ((int)(want).size()) != m) continue;
    while (((int)(want).size()) && ((int)(first).size())) {
      auto it = want.end();
      --it;
      pair<int, int> z = *it;
      pair<int, int> zz = *first.begin();
      if (z.first <= zz.first) {
        break;
      }
      delW(z);
      addW(zz);
      first.erase(first.begin());
      first.insert(z);
    }
    res = min(res, sum);
  }
  if (res == INF) res = -1;
  printf("%I64d\n", res);
  return 0;
}
