#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 15;
long long cc[N], pen[N];
pair<int, int> v[N];
bool is[N];
int val[N], Rank[N];
int g[N];
vector<pair<int, int> > a[2];
void update(int ind, int add) {
  assert(ind > 0);
  int u = ind;
  while (ind < N) cc[ind] += add, ind += ind & (-ind);
  ind = u;
  add *= val[ind];
  while (ind < N) pen[ind] += add, ind += ind & (-ind);
}
long long sum(int ind) {
  long long ret = 0;
  while (ind) ret += pen[ind], ind = ind & (ind - 1);
  return ret;
}
int gc(int ind) {
  int ret = 0;
  while (ind) ret += cc[ind], ind = ind & (ind - 1);
  return ret;
}
long long get(int n, int target) {
  int l = 0, r = n, mid;
  while (l < r) {
    mid = (l + r) / 2;
    if (gc(mid) < target)
      l = mid + 1;
    else
      r = mid;
  }
  assert(gc(l) == target);
  return sum(l);
}
void solve() {
  int n, m, k, i, x;
  scanf("%d%d%d", &n, &m, &k);
  for (i = 1; i <= n; ++i) {
    scanf("%d", &v[i].first);
    val[i] = v[i].first;
    v[i].second = i;
  }
  sort(v + 1, v + n + 1);
  int c;
  for (i = 1; i <= n; ++i) Rank[v[i].second] = i;
  cin >> c;
  for (i = 0; i < c; ++i) {
    scanf("%d", &x);
    ++g[x];
  }
  cin >> c;
  for (i = 0; i < c; ++i) {
    scanf("%d", &x);
    if (g[x])
      ++g[x];
    else
      a[1].push_back(make_pair(val[x], x));
  }
  vector<pair<int, int> > candidate;
  for (i = 1; i <= n; ++i) {
    if (g[i] == 2)
      candidate.push_back(make_pair(val[i], i));
    else if (g[i] == 1)
      a[0].push_back(make_pair(val[i], i));
  }
  sort(val + 1, val + n + 1);
  for (i = 1; i <= n; ++i) update(i, 1);
  sort(a[0].begin(), a[0].end());
  sort(a[1].begin(), a[1].end());
  sort(candidate.begin(), candidate.end());
  int lim = min((int)candidate.size(), k);
  if (min(a[0].size(), a[1].size()) + candidate.size() < k) {
    cout << -1 << endl;
    return;
  }
  bool first = 0;
  long long ret = 1e18, temp = 0, gg = 0;
  int id, j, pos = 0;
  for (i = 0; i <= lim; ++i) {
    if (!first) {
      if (i + k - i + k - i <= m) {
        if (min(a[0].size(), a[1].size()) < k - i) continue;
        first = 1;
        for (j = 0; j < i; ++j) {
          id = Rank[candidate[j].second];
          temp += val[id];
          update(id, -1);
        }
        gg = temp;
        pos = k - i - 1;
        for (j = 0; j < k - i; ++j) {
          id = Rank[a[0][j].second];
          temp += val[id];
          update(id, -1);
        }
        for (j = 0; j < k - i; ++j) {
          id = Rank[a[1][j].second];
          temp += val[id];
          update(id, -1);
        }
        ret = min(ret, temp + get(n, m - 2 * k + i));
      }
      continue;
    }
    id = Rank[candidate[i - 1].second];
    temp += val[id];
    update(id, -1);
    id = Rank[a[0][pos].second];
    temp -= val[id];
    update(id, 1);
    id = Rank[a[1][pos].second];
    temp -= val[id];
    update(id, 1);
    --pos;
    ret = min(ret, temp + get(n, m - 2 * k + i));
  }
  if (ret == 1e18) ret = -1;
  cout << ret << endl;
}
int main() { solve(); }
