#include <bits/stdc++.h>
using namespace std;
const int mod = (int)1e9 + 7;
const int inf = (int)1e9 + 123;
const long long infl = (long long)1e18 + 123;
const double eps = 1e-10;
const int MAX_N = (int)2e5 + 123;
int n, m, k;
pair<int, int> a[MAX_N];
bool first[MAX_N], second[MAX_N];
vector<long long> all[4];
long long pref[MAX_N];
int cnt[MAX_N][4];
long long get(vector<long long> &now, int id) {
  return (id == 0 ? 0 : now[id - 1]);
}
pair<int, long long> Cnt(int len, int x, int need) {
  int have = len - min(x, cnt[len][3]) - min(need, cnt[len][2]) -
             min(need, cnt[len][1]);
  long long res = pref[len] - get(all[3], min(x, cnt[len][3])) -
                  get(all[2], min(need, cnt[len][2])) -
                  get(all[1], min(need, cnt[len][1]));
  return make_pair(have, res);
}
long long Find(int x, int need) {
  int left = m - x - 2 * need;
  if (left == 0) return 0;
  int l = 1, r = n, mid = -1, best = -1;
  while (l <= r) {
    mid = (l + r) / 2;
    if (Cnt(mid, x, need).first >= left) {
      best = mid;
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  assert(best != -1);
  return Cnt(best, x, need).second;
}
long long calc(int x) {
  if ((int)((all[3]).size()) < x) return infl;
  int need = max(0, k - x);
  if ((int)((all[1]).size()) < need || (int)((all[2]).size()) < need)
    return infl;
  long long res = (x == 0 ? 0 : all[3][x - 1]);
  res += (need == 0 ? 0 : all[1][need - 1] + all[2][need - 1]);
  return res + Find(x, need);
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  sort(a + 1, a + n + 1);
  int x, y;
  scanf("%d", &x);
  while (x--) {
    scanf("%d", &y);
    first[y] = 1;
  }
  scanf("%d", &x);
  while (x--) {
    scanf("%d", &y);
    second[y] = 1;
  }
  for (int i = 1; i <= n; i++) {
    pref[i] = pref[i - 1] + a[i].first;
    int id = (int)first[a[i].second] * 2 + (int)second[a[i].second];
    all[id].push_back(a[i].first);
    for (int j = 0; j < 4; j++) cnt[i][j] = cnt[i - 1][j];
    cnt[i][id]++;
  }
  for (int i = 0; i < 4; i++) {
    for (int j = 1; j < (int)((all[i]).size()); j++) {
      all[i][j] += all[i][j - 1];
    }
  }
  long long mini = infl;
  for (int i = 0; i <= n; i++) {
    if (i + 2 * max(0, k - i) <= m) {
      mini = min(mini, calc(i));
    }
  }
  mini = (mini == infl ? -1 : mini);
  printf("%lld\n", mini);
  return 0;
}
