#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
int c[MAXN], id[MAXN];
bool flag[MAXN][2];
int a[4][MAXN], an[4];
long long ans, cur, s0cnt;
multiset<int> s0, s1;
bool comp(int a, int b) { return c[a] < c[b]; }
int main() {
  int n, m, k, minx;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; ++i) scanf("%d", &c[i]), id[i] = i;
  for (int i = 0, nn, x; i < 2; ++i) {
    scanf("%d", &nn);
    while (nn--) scanf("%d", &x), flag[x][i] = true;
  }
  sort(id + 1, id + n + 1, comp);
  for (int i = 1; i <= n; ++i)
    if (!flag[id[i]][0] && !flag[id[i]][1])
      a[0][++an[0]] = c[id[i]];
    else if (flag[id[i]][0] && !flag[id[i]][1])
      a[1][++an[1]] = c[id[i]];
    else if (!flag[id[i]][0] && flag[id[i]][1])
      a[2][++an[2]] = c[id[i]];
    else
      a[3][++an[3]] = c[id[i]];
  ans = LLONG_MAX;
  minx = max(max(2 * k - m, 0), max(k - an[1], k - an[2]));
  if (minx <= m && minx <= an[3]) {
    for (int i = 1; i <= minx; ++i) cur += a[3][i];
    for (int i = minx + 1; i <= an[3]; ++i) s1.insert(a[3][i]);
    for (int j = 1; j <= 2; ++j) {
      for (int i = 1; i <= k - minx; ++i) cur += a[j][i];
      for (int i = k - minx + 1; i <= an[j]; ++i) s1.insert(a[j][i]);
    }
    for (int i = 1; i <= an[0]; ++i) s1.insert(a[0][i]);
    for (int i = 0; i < m - 2 * k + minx; ++i)
      s0cnt += *s1.begin(), s0.insert(*s1.begin()), s1.erase(s1.begin());
    ans = min(ans, cur + s0cnt);
    for (int i = minx + 1; i <= min(m, an[3]); ++i) {
      multiset<int>::iterator iter;
      if ((iter = s1.find(a[3][i])) != s1.end())
        s1.erase(iter);
      else
        s0.erase(s0.find(a[3][i])), s0cnt -= a[3][i];
      for (int j = 1; j <= 2; ++j)
        if (s0.size() == 0 || a[j][k - i + 1] >= *s0.rbegin())
          s1.insert(a[j][k - i + 1]);
        else
          s0.insert(a[j][k - i + 1]), s0cnt += a[j][k - i + 1];
      while (s0.size() < m + i - 2 * k && s1.size() > 0)
        s0cnt += *s1.begin(), s0.insert(*s1.begin()), s1.erase(s1.begin());
      while (s0.size() > m + i - 2 * k)
        s0cnt -= *s0.rbegin(), s1.insert(*s0.rbegin()),
            s0.erase(s0.find(*s0.rbegin()));
      cur += a[3][i];
      cur -= a[1][k - i + 1];
      cur -= a[2][k - i + 1];
      ans = min(ans, cur + s0cnt);
    }
  }
  if (ans == LLONG_MAX) ans = -1;
  printf("%I64d\n", ans);
  return 0;
}
