#include <bits/stdc++.h>
using namespace std;
int n, m, k, x, y, z, w, chosen, cnt;
int A[200005], B[200005], C[200005];
struct node {
  int x, val;
  node() {}
  node(int x, int val) : x(x), val(val) {}
  bool operator<(node const& T) const {
    if (T.val != val) return T.val < val;
    return T.x > x;
  }
} tmp;
struct node2 {
  int x, val;
  node2() {}
  node2(int x, int val) : x(x), val(val) {}
  bool operator<(node2 const& T) const {
    if (T.val != val) return T.val > val;
    return T.x > x;
  }
} tmp2;
long long bothval, QAval, QBval, allval, ans;
int xx, yy;
priority_queue<node> QA, QB;
priority_queue<node2> both;
set<node> allmax;
set<node2> allmin;
set<node>::iterator maxit;
set<node2>::iterator minit;
void update_can_choose(int a, int b) {
  if (allmax.size() == 0) {
    allmin.insert(node2(a, b));
    return;
  }
  maxit = allmax.begin();
  if (b < maxit->val) {
    allval -= maxit->val;
    allmin.insert(node2(maxit->x, maxit->val));
    allmax.erase(maxit);
    allmax.insert(node(a, b));
    allval += b;
  } else
    allmin.insert(node2(a, b));
}
void update_cannot_choose(int a, int b) {
  maxit = allmax.find(node(a, b));
  if (maxit != allmax.end()) {
    allval -= maxit->val;
    allmax.erase(maxit);
    chosen--;
  }
  minit = allmin.find(node2(a, b));
  if (minit != allmin.end()) allmin.erase(minit);
}
int erase_from_allmax() {
  if (allmax.size() == 0) return -1;
  maxit = allmax.begin();
  xx = maxit->x;
  yy = maxit->val;
  allval -= maxit->val;
  allmax.erase(maxit);
  chosen--;
  allmin.insert(node2(xx, yy));
}
int add_from_allmin() {
  if (allmin.size() == 0) return -1;
  minit = allmin.begin();
  xx = minit->x;
  yy = minit->val;
  allval += minit->val;
  allmin.erase(minit);
  chosen++;
  allmax.insert(node(xx, yy));
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = (0); i < (n); i++) scanf("%d", &A[i]);
  if (k > m) {
    printf("-1\n");
    return 0;
  }
  scanf("%d", &x);
  for (int i = (0); i < (x); i++) {
    scanf("%d", &y);
    B[y - 1] = 1;
  }
  scanf("%d", &x);
  for (int i = (0); i < (x); i++) {
    scanf("%d", &y);
    C[y - 1] = 1;
  }
  for (int i = (0); i < (n); i++) {
    if (B[i] == 1 && C[i] == 1) {
      both.push(node2(i, A[i]));
      cnt++;
      bothval += A[i];
    } else if (B[i] == 1)
      QA.push(node(i, A[i]));
    else if (C[i] == 1)
      QB.push(node(i, A[i]));
    if (B[i] + C[i] != 2) allmin.insert(node2(i, A[i]));
  }
  while (cnt > k) {
    tmp2 = both.top();
    both.pop();
    cnt--;
    bothval -= tmp2.val;
    allmin.insert(node2(tmp2.x, tmp2.val));
  }
  chosen = cnt;
  for (int i = (cnt); i < (k); i++) {
    if (QA.empty()) {
      printf("-1\n");
      return 0;
    }
    tmp = QA.top();
    QA.pop();
    QAval += tmp.val;
    chosen++;
    minit = allmin.find(node2(tmp.x, tmp.val));
    if (minit != allmin.end()) allmin.erase(minit);
    if (QB.empty()) {
      printf("-1\n");
      return 0;
    }
    tmp = QB.top();
    QB.pop();
    QBval += tmp.val;
    chosen++;
    minit = allmin.find(node2(tmp.x, tmp.val));
    if (minit != allmin.end()) allmin.erase(minit);
  }
  if (chosen > m) {
    printf("-1\n");
    return 0;
  }
  while (chosen < m) {
    if (allmin.size() == 0) {
      printf("-1\n");
      return 0;
    }
    minit = allmin.begin();
    allval += minit->val;
    xx = minit->x;
    yy = minit->val;
    allmin.erase(minit);
    allmax.insert(node(xx, yy));
    chosen++;
  }
  ans = allval + QBval + QAval + bothval;
  for (int i = (cnt - 1); i >= (0); i--) {
    tmp2 = both.top();
    both.pop();
    bothval -= tmp2.val;
    chosen--;
    update_can_choose(tmp2.x, tmp2.val);
    if (QA.empty() || QB.empty()) break;
    tmp = QA.top();
    QA.pop();
    QAval += tmp.val;
    chosen++;
    update_cannot_choose(tmp.x, tmp.val);
    tmp = QB.top();
    QB.pop();
    QBval += tmp.val;
    chosen++;
    update_cannot_choose(tmp.x, tmp.val);
    while (chosen > m) {
      if (erase_from_allmax() == -1) {
        printf("%lld\n", ans);
        return 0;
      }
    }
    while (chosen < m) {
      if (add_from_allmin() == -1) {
        printf("%lld\n", ans);
        return 0;
      }
    }
    ans = min(ans, allval + QBval + QAval + bothval);
  }
  printf("%lld\n", ans);
  return 0;
}
