#include <bits/stdc++.h>
using namespace std;
const long long oo = 0x3f3f3f3f3f3f3f3fll;
int m, k;
int ln[4], arr[4][200009];
int l0;
long long s0;
priority_queue<long long> heap, h2;
void bota(long long v) {
  s0 += v;
  l0--;
  heap.push(v);
  if (l0 < 0) {
    v = heap.top();
    heap.pop();
    h2.push(-v);
    s0 -= v;
    l0++;
  }
}
long long proc() {
  while (!heap.empty()) heap.pop();
  while (!h2.empty()) h2.pop();
  int l12 = min(min(k, m / 2), min(ln[1], ln[2]));
  long long s2 = 0, s1 = 0;
  for (int(i) = (0); (i) < (l12); ++(i)) s1 += arr[1][i], s2 += arr[2][i];
  int l3 = k - l12;
  if (l3 > ln[3]) return oo;
  long long s3 = 0;
  for (int(i) = (0); (i) < (l3); ++(i)) s3 += arr[3][i];
  l0 = m - l3 - 2 * l12;
  s0 = 0;
  for (int(i) = (0); (i) < (ln[0]); ++(i)) bota(arr[0][i]);
  for (int(i) = (l12); (i) < (ln[1]); ++(i)) bota(arr[1][i]);
  for (int(i) = (l12); (i) < (ln[2]); ++(i)) bota(arr[2][i]);
  long long ans = oo;
  if (l0 == 0) {
    ans = min(ans, s0 + s1 + s2 + s3);
  }
  while (1) {
    if (l12 > 0) {
      l12--;
      long long v = arr[1][l12];
      s1 -= v;
      bota(v);
      v = arr[2][l12];
      s2 -= v;
      bota(v);
      l0 += 2;
    }
    if (l3 == ln[3]) break;
    s3 += arr[3][l3++];
    l0--;
    while (l0 < 0 && !heap.empty()) {
      long long v = heap.top();
      heap.pop();
      h2.push(-v);
      s0 -= v;
      l0++;
    }
    while (l0 > 0 && !h2.empty()) {
      int v = -h2.top();
      h2.pop();
      s0 += v;
      l0--;
      heap.push(v);
    }
    if (l0 == 0) {
      ans = min(ans, s0 + s1 + s2 + s3);
    }
  }
  return ans;
}
int c[200009];
int n, ca, cb;
bool ma[200009], mb[200009];
int main() {
  while (scanf("%d%d%d", &n, &m, &k) == 3) {
    for (int(i) = (0); (i) < (n); ++(i)) scanf("%d", &c[i]);
    memset((ma), (0), sizeof(ma));
    memset((mb), (0), sizeof(mb));
    scanf("%d", &ca);
    for (int(i) = (0); (i) < (ca); ++(i)) {
      int j;
      scanf("%d", &j);
      ma[j - 1] = 1;
    }
    scanf("%d", &cb);
    for (int(i) = (0); (i) < (cb); ++(i)) {
      int j;
      scanf("%d", &j);
      mb[j - 1] = 1;
    }
    if (min(ca, cb) < k) {
      puts("-1");
      return 0;
    }
    memset((ln), (0), sizeof(ln));
    for (int(i) = (0); (i) < (n); ++(i)) {
      int k = 0;
      if (ma[i]) k += 1;
      if (mb[i]) k += 2;
      arr[k][ln[k]++] = c[i];
    }
    for (int(i) = (0); (i) < (4); ++(i)) sort(arr[i], arr[i] + ln[i]);
    long long ans = proc();
    if (ans == oo)
      puts("-1");
    else
      printf("%lld\n", ans);
  }
  return 0;
}
