#include <bits/stdc++.h>
using namespace std;
int vet[200001];
int pos[200001];
vector<int> nums[4];
vector<long long> acum[4];
map<int, int> freq;
set<pair<int, int> > conju, conju2;
int main() {
  int N, M, K, A, x;
  scanf("%d %d %d", &N, &M, &K);
  if (K > M) return !printf("-1\n");
  for (int i = 1; i <= N; i++) scanf("%d", &vet[i]);
  scanf("%d", &A);
  while (A--) {
    scanf("%d", &x);
    pos[x] |= 1;
  }
  scanf("%d", &A);
  while (A--) {
    scanf("%d", &x);
    pos[x] |= 2;
  }
  for (int i = 1; i <= N; i++) nums[pos[i]].push_back(vet[i]);
  for (int i = 0; i < 4; i++) sort(nums[i].begin(), nums[i].end());
  for (int j = 0; j < 4; j++) {
    acum[j].resize(nums[j].size() + 1);
    for (int i = 0; i < nums[j].size(); i++)
      acum[j][i + 1] = acum[j][i] + nums[j][i];
  }
  long long ans = 1001001001001001001LL;
  int res = M - 2 * K + min(K, (int)nums[3].size());
  for (auto v : nums[0]) {
    freq[v]++;
    if (res == 0)
      conju2.insert({v, freq[v]});
    else {
      if (conju.size() < res)
        conju.insert({v, freq[v]});
      else {
        auto it = conju.end();
        it--;
        if (*it > make_pair(v, freq[v])) {
          conju2.insert(*it);
          conju.erase(it);
          conju.insert({v, freq[v]});
        } else
          conju2.insert({v, freq[v]});
      }
    }
  }
  int v;
  for (int j = 1; j <= 2; j++) {
    for (int i = K - min((int)nums[3].size(), K); i < nums[j].size(); i++) {
      v = nums[j][i];
      freq[v]++;
      if (res == 0)
        conju2.insert({v, freq[v]});
      else {
        if (conju.size() < res)
          conju.insert({v, freq[v]});
        else {
          auto it = conju.end();
          it--;
          if (*it > make_pair(v, freq[v])) {
            conju2.insert(*it);
            conju.erase(it);
            conju.insert({v, freq[v]});
          } else
            conju2.insert({v, freq[v]});
        }
      }
    }
  }
  for (int i = K; i < nums[3].size(); i++) {
    v = nums[3][i];
    freq[v]++;
    if (res == 0)
      conju2.insert({v, freq[v]});
    else {
      if (conju.size() < res)
        conju.insert({v, freq[v]});
      else {
        auto it = conju.end();
        it--;
        if (*it > make_pair(v, freq[v])) {
          conju2.insert(*it);
          conju.erase(it);
          conju.insert({v, freq[v]});
        } else
          conju2.insert({v, freq[v]});
      }
    }
  }
  long long soma = 0;
  if (conju.size()) {
    auto it = conju.begin();
    for (int i = 0; i < M - 2 * K + min((int)nums[3].size(), K); i++) {
      soma += it->first;
      it++;
    }
  }
  for (int i = min((int)nums[3].size(), K); i >= 0; i--) {
    if (nums[1].size() < K - i || nums[2].size() < K - i || 2 * K - i > M)
      break;
    int res = M - 2 * K + i;
    if (res < conju.size()) {
      auto it = conju.end();
      it--;
      soma -= it->first;
      conju2.insert(*it);
      conju.erase(it);
    }
    ans = min(ans, acum[3][i] + acum[1][K - i] + acum[2][K - i] + soma);
    if (i == 0 || soma == 0) break;
    freq[nums[3][i - 1]]++;
    auto p = make_pair(nums[3][i - 1], freq[nums[3][i - 1]]);
    if (res == 0)
      conju2.insert(p);
    else {
      auto it = conju.end();
      it--;
      if (p > *it)
        conju2.insert(p);
      else {
        soma -= it->first - p.first;
        conju2.insert(*it);
        conju.erase(it);
        conju.insert(p);
      }
    }
    for (int j = 1; j <= 2; j++) {
      if (K - i >= nums[j].size()) continue;
      auto p = make_pair(nums[j][K - i], freq[nums[j][K - i]]);
      freq[nums[j][K - i]]--;
      if (freq[nums[j][K - i]] == 0) freq.erase(nums[j][K - i]);
      if (conju2.count(p))
        conju2.erase(p);
      else {
        soma -= p.first;
        conju.erase(p);
        conju.insert(*conju2.begin());
        soma += conju2.begin()->first;
        conju2.erase(conju2.begin());
      }
    }
  }
  if (ans == 1001001001001001001LL)
    printf("-1\n");
  else
    printf("%lld\n", ans);
  return 0;
}
