#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1000000000")
using namespace std;
const int MAXN = 200200;
const int INF = 1000 * 1000 * 1000 + 10;
const long long INFL = (1ll << 60);
int c[MAXN];
struct cmp {
  bool operator()(int x, int y) const {
    if (c[x] < c[y]) return true;
    if (c[x] > c[y]) return false;
    return x < y;
  }
};
vector<int> both;
vector<int> arc;
vector<int> mash;
int n, m, k;
set<int, cmp> st;
set<int, cmp>::iterator stp;
int stk = 0;
int tp[MAXN];
long long cur = 0;
int ops = 0;
void ad(int x) {
  if (*stp == x) {
    stk++;
    cur += c[*(stp++)];
  }
  if (cmp()(x, *stp)) {
    stk--;
  } else {
    cur += c[x];
  }
  st.erase(x);
}
void rm(int x) {
  st.insert(x);
  if (cmp()(x, *stp))
    stk++;
  else
    cur -= c[x];
}
void updst() {
  int need = m + (st.size() - 1) - n;
  if (need < 0) {
    cur = INFL;
    return;
  }
  while (stk > need) {
    stk--;
    cur -= c[*(--stp)];
  }
  while (stk < need) {
    stk++;
    cur += c[*(stp++)];
  }
}
int ids[MAXN];
void no() {
  cout << -1 << endl;
  exit(0);
}
int main() {
  ios_base::sync_with_stdio(0);
  cout.setf(ios::fixed);
  cout.precision(20);
  scanf("%d%d%d", &n, &m, &k);
  if (k > m) no();
  c[0] = INF;
  st.insert(0);
  long long ans = INFL;
  memset(tp, 0, sizeof(tp));
  for (int i = 1; i <= n; i++) {
    scanf("%d", c + i);
    ids[i] = i;
    st.insert(i);
  }
  stp = st.begin();
  sort(ids + 1, ids + n + 1, cmp());
  int cn;
  scanf("%d", &cn);
  if (cn < k) no();
  for (int i = 0; i < cn; i++) {
    int x;
    scanf("%d", &x);
    tp[x]++;
  }
  scanf("%d", &cn);
  if (cn < k) no();
  for (int i = 0; i < cn; i++) {
    int x;
    scanf("%d", &x);
    tp[x] += 2;
  }
  for (int i = 1; i <= n; i++) {
    int j = ids[i];
    if (tp[j] == 1)
      mash.push_back(j);
    else if (tp[j] == 2)
      arc.push_back(j);
    else if (tp[j] == 3)
      both.push_back(j);
  }
  if (2 * k - (long long)(both.size()) > m) no();
  int bs = min(int(both.size()), k);
  for (int i = 0; i < bs; i++) {
    ad(both[i]);
  }
  for (int i = 0; i < k - bs; i++) {
    ad(mash[i]);
    ad(arc[i]);
  }
  for (int i = bs; i >= 0; i--) {
    if (i != bs) {
      rm(both[i]);
      int cid = k - i - 1;
      if (mash.size() <= cid) break;
      if (arc.size() <= cid) break;
      ad(mash[cid]);
      ad(arc[cid]);
    }
    updst();
    ans = min(ans, cur);
  }
  cout << ans << endl;
  return 0;
}
