#include <bits/stdc++.h>
using namespace std;
char _;
const long double PI = (long double)4 * atanl(1);
mt19937 g1(chrono::steady_clock::now().time_since_epoch().count());
int randint(int a, int b) { return uniform_int_distribution<int>(a, b)(g1); }
long long randlong(long long a, long long b) {
  return uniform_int_distribution<long long>(a, b)(g1);
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
long long fpow(long long b, long long exp, long long mod) {
  if (exp == 0) return 1;
  long long t = fpow(b, exp / 2, mod);
  if (exp & 1) return t * t % mod * b % mod;
  return t * t % mod;
}
long long divmod(long long i, long long j, long long mod) {
  i %= mod, j %= mod;
  return i * fpow(j, mod - 2, mod) % mod;
}
int N, M, K, cnt[200005], cost[200005];
long long bp[200005], fp[200005], sp[200005], spp[200005];
vector<int> both, f, s, spare;
inline int gidx(vector<int> &v, int val) {
  return upper_bound(v.begin(), v.end(), val) - v.begin();
}
inline int calc(vector<int> &v, int lim, int val) {
  int idx = gidx(v, val) - lim;
  return max(0, idx);
}
int main() {
  cin.tie(0);
  cin.sync_with_stdio(0);
  ;
  cin >> N >> M >> K;
  for (int i = 1; i <= N; i++) cin >> cost[i];
  int am;
  cin >> am;
  if (am < K) {
    cout << -1 << "\n";
    return 0;
  }
  for (int i = 1; i <= am; i++) {
    int a;
    cin >> a;
    cnt[a] ^= 1;
  }
  cin >> am;
  if (am < K) {
    cout << -1 << "\n";
    return 0;
  }
  for (int i = 1; i <= am; i++) {
    int a;
    cin >> a;
    cnt[a] ^= 2;
  }
  for (int i = 1; i <= N; i++) {
    if (cnt[i] == 0) spare.push_back(cost[i]);
    if (cnt[i] == 1) f.push_back(cost[i]);
    if (cnt[i] == 2) s.push_back(cost[i]);
    if (cnt[i] == 3) both.push_back(cost[i]);
  }
  sort(spare.begin(), spare.end());
  sort(f.begin(), f.end());
  sort(s.begin(), s.end());
  sort(both.begin(), both.end());
  for (int i = 1; i <= f.size(); i++) fp[i] = fp[i - 1] + f[i - 1];
  for (int i = 1; i <= s.size(); i++) sp[i] = sp[i - 1] + s[i - 1];
  for (int i = 1; i <= both.size(); i++) bp[i] = bp[i - 1] + both[i - 1];
  for (int i = 1; i <= spare.size(); i++) spp[i] = spp[i - 1] + spare[i - 1];
  long long res = 0x3f3f3f3f3f3f3f3f;
  for (int i = 0; i <= min(M, (int)both.size()); i++) {
    int rem = max(0, K - i);
    if (i + 2 * rem > M) continue;
    if (rem > f.size()) continue;
    if (rem > s.size()) continue;
    long long t = bp[i] + fp[rem] + sp[rem];
    rem = M - (i + 2 * rem);
    if (f.size() - max(0, K - i) + s.size() - max(0, K - i) + spare.size() <
        rem)
      continue;
    int low = 0, high = 1e9, ans = 0;
    while (low <= high) {
      int mid = (low + high) / 2;
      int t = calc(f, max(0, K - i), mid) + calc(s, max(0, K - i), mid) +
              calc(spare, 0, mid);
      if (t <= rem) {
        ans = mid;
        low = mid + 1;
      } else
        high = mid - 1;
    }
    int a = gidx(f, ans), b = gidx(s, ans), d = gidx(spare, ans);
    a = max(a, K - i);
    b = max(b, K - i);
    t += fp[a] - fp[max(0, K - i)];
    t += sp[b] - sp[max(0, K - i)];
    t += spp[d];
    rem -= (a - max(0, K - i));
    rem -= (b - max(0, K - i));
    rem -= d;
    vector<int> v;
    if (a < f.size()) v.push_back(f[a]);
    if (b < s.size()) v.push_back(s[b]);
    if (d < spare.size()) v.push_back(spare[d]);
    sort(v.begin(), v.end());
    if (v.size()) t += v[0] * rem;
    res = min(res, t);
  }
  if (res == 0x3f3f3f3f3f3f3f3f)
    cout << -1 << "\n";
  else
    cout << res << "\n";
}
