#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007LL;
long long base = 37;
long long large = 1000000000000000000LL;
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  vector<long long> c(n, 0);
  for (int i = 0; i < n; i++) cin >> c[i];
  vector<bool> a(n, false), b(n, false);
  int sza;
  cin >> sza;
  for (int i = 0; i < sza; i++) {
    int x;
    cin >> x;
    x--;
    a[x] = true;
  }
  int szb;
  cin >> szb;
  for (int i = 0; i < szb; i++) {
    int x;
    cin >> x;
    x--;
    b[x] = true;
  }
  vector<pair<int, int> > ua, ub, bo;
  for (int i = 0; i < n; i++) {
    if (a[i] && b[i])
      bo.push_back(pair<int, int>(c[i], i));
    else {
      if (a[i]) ua.push_back(pair<int, int>(c[i], i));
      if (b[i]) ub.push_back(pair<int, int>(c[i], i));
    }
  }
  sort(bo.begin(), bo.end());
  sort(ua.begin(), ua.end());
  sort(ub.begin(), ub.end());
  vector<pair<int, int> > sc;
  for (int i = 0; i < n; i++) sc.push_back(pair<int, int>(c[i], i));
  sort(sc.begin(), sc.end());
  vector<int> pos(n, 0);
  for (int i = 0; i < n; i++) pos[sc[i].second] = i;
  vector<bool> used(n, false);
  int st = min(k, (int)ua.size());
  st = min(st, (int)ub.size());
  long long ans = large;
  long long acc = 0LL;
  if ((int)bo.size() < k - st) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < st; i++) {
    used[ua[i].second] = true;
    acc += c[ua[i].second];
    used[ub[i].second] = true;
    acc += c[ub[i].second];
  }
  for (int i = 0; i < k - st; i++) {
    used[bo[i].second] = true;
    acc += c[bo[i].second];
  }
  int po = 0;
  int cnt = k + st;
  while (po < (int)sc.size() && (used[sc[po].second] || cnt < m)) {
    if (used[sc[po].second])
      po++;
    else {
      cnt++;
      acc += sc[po].first;
      po++;
    }
  }
  if (cnt < m) {
    cout << -1 << endl;
    return 0;
  }
  if (cnt == m) ans = min(ans, acc);
  int up = st;
  up--;
  st = k - st;
  for (int i = st; i < (int)bo.size(); i++) {
    if (pos[bo[i].second] < po) {
      used[bo[i].second] = true;
    } else {
      used[bo[i].second] = true;
      acc += bo[i].first;
      cnt++;
    }
    if (up >= 0) {
      if (pos[ua[up].second] >= po) {
        used[ua[up].second] = false;
        acc -= ua[up].first;
        cnt--;
      } else {
        used[ua[up].second] = false;
      }
      if (pos[ub[up].second] >= po) {
        used[ub[up].second] = false;
        acc -= ub[up].first;
        cnt--;
      } else {
        used[ub[up].second] = false;
      }
      up--;
    }
    while (po < (int)sc.size() && cnt < m) {
      if (used[sc[po].second])
        po++;
      else {
        cnt++;
        acc += sc[po].first;
        po++;
      }
    }
    while (po > 0 && cnt > m) {
      if (used[sc[po - 1].second])
        po--;
      else {
        cnt--;
        po--;
        acc -= sc[po].first;
      }
    }
    if (cnt == m) ans = min(ans, acc);
  }
  if (ans == large) ans = -1LL;
  cout << ans << endl;
  return 0;
}
