#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
map<long long, int> mp;
long long rmp[N];
long long c[N];
int aa[N];
int bb[N];
int ab[N];
long long paa[N];
long long pbb[N];
long long pab[N];
int a[N];
int b[N];
long long BIT[2][N];
long long query(int bn, int i) {
  long long ans = 0;
  while (i > 0) {
    ans += BIT[bn][i];
    i -= (i & -i);
  }
  return ans;
}
void update(int bn, int i, long long val) {
  while (i < N) {
    BIT[bn][i] += val;
    i += (i & -i);
  }
}
void add(int val) {
  update(0, val, 1);
  update(1, val, rmp[val]);
}
void rem(int val) {
  update(0, val, -1);
  update(1, val, -rmp[val]);
}
long long query(int x) {
  if (x == 0) return 0;
  int l = 1, r = N - 1;
  while (l < r) {
    int m = (l + r) >> 1;
    if (x <= query(0, m))
      r = m;
    else
      l = m + 1;
  }
  return query(1, l) - rmp[l] * (query(0, l) - x);
}
int aac = 0, bbc = 0, abc = 0;
void upd(int &p1, int &p2, int &p3) {
  p1++;
  if (p1 >= 1 && p1 <= aac) rem(aa[p1]);
  p2++;
  if (p2 >= 1 && p2 <= bbc) rem(bb[p2]);
  if (p3 >= 1 && p3 <= abc) add(ab[p3]);
  p3--;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  vector<long long> all;
  for (int i = 1; i <= n; i++) {
    cin >> c[i];
    all.push_back(c[i]);
  }
  sort(all.begin(), all.end());
  mp[all[0]] = 1;
  rmp[1] = all[0];
  for (int i = 1; i < all.size(); i++) {
    if (all[i] != all[i - 1]) mp[all[i]] = mp[all[i - 1]] + 1;
    rmp[mp[all[i]]] = all[i];
  }
  for (int i = 1; i <= n; i++) {
    c[i] = mp[c[i]];
  }
  int ca, cb;
  cin >> ca;
  for (int i = 1; i <= ca; i++) {
    int t;
    cin >> t;
    a[t] = 1;
  }
  cin >> cb;
  for (int i = 1; i <= cb; i++) {
    int t;
    cin >> t;
    b[t] = 1;
  }
  for (int i = 1; i <= n; i++) {
    if (a[i] && b[i]) {
      ab[++abc] = c[i];
    } else if (a[i]) {
      aa[++aac] = c[i];
    } else if (b[i]) {
      bb[++bbc] = c[i];
    } else {
      add(c[i]);
    }
  }
  sort(aa + 1, aa + 1 + aac);
  sort(bb + 1, bb + 1 + bbc);
  sort(ab + 1, ab + 1 + abc);
  for (int i = 1; i <= aac; i++) paa[i] = paa[i - 1] + rmp[aa[i]];
  for (int i = 1; i <= bbc; i++) pbb[i] = pbb[i - 1] + rmp[bb[i]];
  for (int i = 1; i <= abc; i++) pab[i] = pab[i - 1] + rmp[ab[i]];
  int p1 = 0, p2 = 0, p3 = k;
  for (int i = 1; i <= aac; i++) add(aa[i]);
  for (int i = 1; i <= bbc; i++) add(bb[i]);
  for (int i = k + 1; i <= abc; i++) {
    add(ab[i]);
  }
  long long ans = 1e18;
  for (; p3 >= 0; upd(p1, p2, p3)) {
    if (p1 > aac) continue;
    if (p1 > bbc) continue;
    if (p3 > abc) continue;
    if (p1 + p2 + p3 > m) continue;
    long long cc = paa[p1] + pbb[p2] + pab[p3];
    cc += query(m - p1 - p2 - p3);
    ans = min(ans, cc);
  }
  if (ans == 1e18)
    cout << -1 << endl;
  else
    cout << ans << endl;
}
