#include <bits/stdc++.h>
using namespace std;
const int INF = 2 * int(1e9);
const long long INFll = 1ll * int(1e9) * int(1e9);
const int MOD = 1000000007;
template <typename T, typename Q>
ostream& operator<<(ostream& out, pair<T, Q>& a) {
  out << a.first << " " << a.second;
  return out;
}
template <typename T, typename Q>
istream& operator>>(istream& in, pair<T, Q>& a) {
  in >> a.first >> a.second;
  return in;
}
template <typename T>
istream& operator>>(istream& in, vector<T>& a) {
  for (int i = 0; i < a.size(); ++i) in >> a[i];
  return in;
}
template <typename T>
ostream& operator<<(ostream& out, vector<T> a) {
  for (int i = 0; i < a.size(); ++i)
    if (i == a.size() - 1)
      out << a[i];
    else
      out << a[i] << " ";
  return out;
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  int n, m, k;
  cin >> n >> m >> k;
  vector<int> c(n);
  cin >> c;
  vector<int> l1(n), l2(n);
  int a;
  cin >> a;
  for (int i = 0; i < a; ++i) {
    int x;
    cin >> x;
    l1[x - 1] = 1;
  }
  cin >> a;
  for (int i = 0; i < a; ++i) {
    int x;
    cin >> x;
    l2[x - 1] = 1;
  }
  set<pair<int, int> > sum, available;
  vector<int> oa, ob, ab;
  for (int i = 0; i < n; ++i)
    if (l1[i] && l2[i])
      ab.push_back(i);
    else if (l1[i])
      oa.push_back(i);
    else if (l2[i])
      ob.push_back(i);
  sort(oa.begin(), oa.end(), [&](int a, int b) { return c[a] < c[b]; });
  sort(ob.begin(), ob.end(), [&](int a, int b) { return c[a] < c[b]; });
  sort(ab.begin(), ab.end(), [&](int a, int b) { return c[a] < c[b]; });
  long long ans = INFll;
  long long suma = 0;
  long long sumb = 0;
  long long sumab = 0;
  long long sumother = 0;
  int cura = 0;
  int curb = 0;
  for (int i = 0; i < n; ++i) available.insert(make_pair(c[i], i));
  for (int i = 0; i < k + 1; ++i) {
    while (cura < oa.size() && cura < k - i) {
      if (sum.count(make_pair(c[oa[cura]], oa[cura])))
        sumother -= c[oa[cura]], sum.erase(make_pair(c[oa[cura]], oa[cura]));
      else
        available.erase(make_pair(c[oa[cura]], oa[cura]));
      suma += c[oa[cura]];
      cura++;
    }
    while (curb < ob.size() && curb < k - i) {
      if (sum.count(make_pair(c[ob[curb]], ob[curb])))
        sumother -= c[ob[curb]], sum.erase(make_pair(c[ob[curb]], ob[curb]));
      else
        available.erase(make_pair(c[ob[curb]], ob[curb]));
      sumb += c[ob[curb]];
      curb++;
    }
    while (cura > k - i) {
      cura--;
      suma -= c[oa[cura]];
      available.insert(make_pair(c[oa[cura]], oa[cura]));
    }
    while (curb > k - i) {
      curb--;
      sumb -= c[ob[curb]];
      available.insert(make_pair(c[ob[curb]], ob[curb]));
    }
    if (cura == k - i && curb == k - i) {
      while (!sum.empty() && cura + curb + i + sum.size() > m) {
        sumother -= (--sum.end())->first;
        available.insert(*(--sum.end()));
        sum.erase(--sum.end());
      }
      while (!available.empty() && cura + curb + i + sum.size() < m) {
        sum.insert(*available.begin());
        sumother += available.begin()->first;
        available.erase(available.begin());
      }
      while (!available.empty() && !sum.empty() &&
             available.begin()->first < (--sum.end())->first) {
        sumother -= (--sum.end())->first;
        sumother += available.begin()->first;
        pair<int, int> tmp1 = *(--sum.end());
        pair<int, int> tmp2 = *(available.begin());
        sum.erase(--sum.end());
        available.erase(available.begin());
        sum.insert(tmp2);
        available.insert(tmp1);
      }
      if (cura + curb + i + sum.size() == m)
        ans = min(ans, suma + sumb + sumab + sumother);
    }
    if (i < k) {
      if (i == ab.size()) break;
      if (sum.count(make_pair(c[ab[i]], ab[i])))
        sumother -= c[ab[i]], sum.erase(make_pair(c[ab[i]], ab[i]));
      else
        available.erase(make_pair(c[ab[i]], ab[i]));
      sumab += c[ab[i]];
    }
  }
  if (ans == INFll)
    cout << "-1\n";
  else
    cout << ans << endl;
  if (0)
    cerr << fixed << setprecision(0)
         << "TIME = " << clock() / (long double)CLOCKS_PER_SEC * 1000 << "\n";
  return 0;
}
