#include <bits/stdc++.h>
using namespace std;
const double pi =
    3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342;
const int MR = 2e5 + 10;
int state[MR], c[MR];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  if (m < k) {
    printf("-1\n");
    return 0;
  }
  for (int i = 0; i < (n); ++i) scanf("%d", &c[i]);
  int a;
  scanf("%d", &a);
  for (int i = 0; i < (a); ++i) {
    int v;
    scanf("%d", &v);
    v--;
    state[v]++;
  }
  scanf("%d", &a);
  for (int i = 0; i < (a); ++i) {
    int v;
    scanf("%d", &v);
    v--;
    state[v] += 2;
  }
  set<pair<int, int>> S[4];
  for (int i = 0; i < (n); ++i) S[state[i]].insert(make_pair(c[i], i));
  vector<pair<int, int>> V3, V0;
  long long res = 0;
  while (k && !S[3].empty()) {
    auto beg = S[3].begin();
    res += beg->first;
    V3.push_back(*beg);
    k--;
    m--;
    S[3].erase(beg);
  }
  for (int i = (1); i <= (2); ++i) {
    int tmp = k;
    while (tmp && !S[i].empty()) {
      auto beg = S[i].begin();
      res += beg->first;
      tmp--;
      m--;
      S[i].erase(beg);
    }
    if (tmp || m < 0) {
      printf("-1\n");
      return 0;
    }
  }
  vector<int> pts(4, 0);
  for (int i = 0; i < (m); ++i) {
    int tmp = 1e9 + 10;
    for (int j = 0; j < (4); ++j) {
      if (S[j].empty()) continue;
      tmp = min(tmp, S[j].begin()->first);
    }
    res += tmp;
    for (int j = 0; j < (4); ++j) {
      if (S[j].empty()) continue;
      auto beg = S[j].begin();
      if (tmp == beg->first) {
        if (!j)
          V0.push_back(*beg);
        else if (j < 3)
          pts[j]++;
        else {
          pts[1]++;
          pts[2]++;
        }
        S[j].erase(beg);
        break;
      }
    }
  }
  while (!V3.empty() && (!S[1].empty() || !S[2].empty())) {
    auto sz = V3.size();
    for (int i = (1); i <= (2); ++i) {
      if (pts[i] > 0) {
        int rem = V3.back().first;
        if (!pts[i == 1 ? 2 : 1] && !S[i == 1 ? 2 : 1].empty()) {
          auto beg = S[i == 1 ? 2 : 1].begin();
          if (beg->first < rem) {
            res -= rem;
            res += beg->first;
            V3.pop_back();
            S[i == 1 ? 2 : 1].erase(beg);
            pts[i]--;
          }
        } else if (pts[i == 1 ? 2 : 1] > 0) {
          int tmp = 1e9 + 10;
          for (int j = 0; j < (4); ++j) {
            if (S[j].empty()) continue;
            tmp = min(tmp, S[j].begin()->first);
          }
          if (tmp < rem) {
            res -= rem;
            V3.pop_back();
            res += tmp;
            pts[1]--;
            pts[2]--;
            for (int j = 0; j < (4); ++j) {
              if (S[j].empty()) continue;
              auto beg = S[j].begin();
              if (tmp == beg->first) {
                if (!j)
                  V0.push_back(*beg);
                else if (j < 3)
                  pts[j]++;
                else {
                  pts[1]++;
                  pts[2]++;
                }
                S[j].erase(beg);
                break;
              }
            }
          }
        }
      }
    }
    if (V3.size() == sz) break;
  }
  while (!V3.empty() && !V0.empty() && !S[1].empty() && !S[2].empty()) {
    auto sz = V3.size();
    int sum = V3.back().first + V0.back().first;
    auto beg1 = S[1].begin(), beg2 = S[2].begin();
    if (beg1->first + beg2->first < sum) {
      res -= sum;
      res += beg1->first + beg2->first;
      S[1].erase(beg1);
      S[2].erase(beg2);
      V3.pop_back();
      V0.pop_back();
    }
    if (V3.size() == sz) break;
  }
  printf("%lld\n", res);
  return 0;
}
