#include <bits/stdc++.h>
using namespace std;
int n, m, k, a[200005], p, q;
int t[200005];
int aa[4];
long long sum3[200005], sum2[200005];
vector<pair<int, int> > vec[4];
int main() {
  scanf("%d%d%d", &n, &m, &k);
  if (m < k) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  scanf("%d", &p);
  for (int i = 1; i <= p; i++) {
    int x;
    scanf("%d", &x);
    t[x] |= 1;
  }
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) {
    int x;
    scanf("%d", &x);
    t[x] |= 2;
  }
  for (int i = 1; i <= n; i++) {
    aa[t[i]]++;
    vec[t[i]].push_back(make_pair(a[i], i));
  }
  for (int i = 0; i < 4; i++) sort(vec[i].begin(), vec[i].end());
  int L = 1000000000, R = -1000000000;
  for (int x = 0; x <= m; x++) {
    if (aa[3] >= x && aa[1] >= k - x && aa[2] >= k - x &&
        m >= x + 2 * max(0, k - x) && m <= n - (aa[3] - x)) {
      L = min(L, x);
      R = max(R, x);
    }
  }
  if (L > R) {
    puts("-1");
    return 0;
  }
  long long sum = 0;
  for (int x = 1; x <= aa[3]; x++) {
    sum += vec[3][x - 1].first;
    sum3[x] = sum;
  }
  sum = 0;
  for (int x = 1; x <= min(vec[1].size(), vec[2].size()); x++) {
    sum += vec[1][x - 1].first + vec[2][x - 1].first;
    sum2[x] = sum;
  }
  multiset<pair<int, int> > use, unuse;
  long long S = 0;
  for (int i = max(0, k - L); i < vec[1].size(); i++) {
    use.insert(vec[1][i]);
    S += vec[1][i].first;
  }
  for (int i = max(0, k - L); i < vec[2].size(); i++) {
    use.insert(vec[2][i]);
    S += vec[2][i].first;
  }
  for (int i = 0; i < vec[0].size(); i++) {
    use.insert(vec[0][i]);
    S += vec[0][i].first;
  }
  while (use.size() > m - L - 2 * max(0, k - L)) {
    multiset<pair<int, int> >::iterator it = use.end();
    it--;
    pair<int, int> p = *it;
    use.erase(it);
    S -= p.first;
    unuse.insert(p);
  }
  assert(use.size() == m - L - 2 * max(0, k - L));
  long long ans = sum3[L] + sum2[max(0, k - L)] + S;
  for (int i = L + 1; i <= R; i++) {
    int id = k - i;
    if (unuse.size()) {
      multiset<pair<int, int> >::iterator it = unuse.begin();
      pair<int, int> p = *it;
      S += p.first;
      use.insert(p);
      unuse.erase(it);
    }
    if (unuse.size()) {
      multiset<pair<int, int> >::iterator it = unuse.begin();
      pair<int, int> p = *it;
      S += p.first;
      use.insert(p);
      unuse.erase(it);
    }
    if (id >= 0) {
      use.insert(vec[1][id]);
      S += vec[1][id].first;
    }
    if (id >= 0) {
      use.insert(vec[2][id]);
      S += vec[2][id].first;
    }
    while (use.size() > m - i - 2 * max(0, k - i)) {
      multiset<pair<int, int> >::iterator it = use.end();
      it--;
      pair<int, int> p = *it;
      use.erase(it);
      S -= p.first;
      unuse.insert(p);
    }
    assert(use.size() == m - i - 2 * max(0, k - i));
    ans = min(ans, sum3[i] + sum2[max(0, k - i)] + S);
  }
  cout << ans << endl;
}
