#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
long long solveGK(vector<long long>& ma, vector<long long>& m,
                  vector<long long>& a, vector<long long>& n, long long K,
                  long long M) {
  long long res = 0;
  if (ma.size() < K) return res;
  multiset<long long> x;
  for (int i = 0; i < (K); ++i) {
    res += ma[i];
  }
  for (int i = K; i < ma.size(); ++i) {
    x.insert(ma[i]);
  }
  if (!m.empty()) x.insert(m.begin(), m.end());
  if (!a.empty()) x.insert(a.begin(), a.end());
  if (!n.empty()) x.insert(n.begin(), n.end());
  for (int i = 0; i < (M - K); ++i) {
    res += *x.begin();
    x.erase(x.begin());
  }
  return res;
}
long long solve0(vector<long long>& m, vector<long long>& a,
                 vector<long long>& n, long long K, long long M) {
  long long res = 0;
  multiset<long long> x;
  for (int i = 0; i < (K); ++i) {
    res += m[i];
    res += a[i];
  }
  for (int i = K; i < m.size(); ++i) {
    x.insert(m[i]);
  }
  for (int i = K; i < a.size(); ++i) {
    x.insert(a[i]);
  }
  if (!n.empty()) x.insert(n.begin(), n.end());
  for (int i = 0; i < (M - 2 * K); ++i) {
    res += *x.begin();
    x.erase(x.begin());
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int N, M, K;
  cin >> N >> M >> K;
  vector<long long> C(N);
  for (int i = 0; i < (N); ++i) {
    cin >> C[i];
  }
  vector<int> mLikes(N), aLikes(N);
  int ML;
  cin >> ML;
  for (int i = 0; i < (ML); ++i) {
    int x;
    cin >> x;
    x--;
    mLikes[x] = 1;
  }
  int AL;
  cin >> AL;
  for (int i = 0; i < (AL); ++i) {
    int x;
    cin >> x;
    x--;
    aLikes[x] = 1;
  }
  vector<long long> ma, m, a, n;
  for (int i = 0; i < (N); ++i) {
    if (mLikes[i] && aLikes[i])
      ma.push_back(C[i]);
    else if (mLikes[i])
      m.push_back(C[i]);
    else if (aLikes[i])
      a.push_back(C[i]);
    else
      n.push_back(C[i]);
  }
  if (!ma.empty()) sort(ma.begin(), ma.end());
  if (!m.empty()) sort(m.begin(), m.end());
  if (!a.empty()) sort(a.begin(), a.end());
  if (!n.empty()) sort(n.begin(), n.end());
  int mas = ma.size();
  int ms = m.size();
  int as = a.size();
  int ns = n.size();
  if (M < K) {
    cout << -1 << endl;
    return 0;
  }
  if (mas + ms < K) {
    cout << -1 << endl;
    return 0;
  }
  if (mas + as < K) {
    cout << -1 << endl;
    return 0;
  }
  if (mas < K) {
    int nm = K - mas;
    int na = K - mas;
    if (mas + nm + na > M) {
      cout << -1 << endl;
      return 0;
    }
  }
  long long res = 0;
  if (mas > K) {
    res = solveGK(ma, m, a, n, K, M);
  }
  if (mas > 0) {
    long long curr = 0;
    int common = min(K, mas);
    for (int i = 0; i < (common); ++i) {
      curr += ma[i];
    }
    int mp = 0, ap = 0;
    int mc = common, ac = common;
    for (int i = 0; i < (K - common); ++i) {
      curr += m[mp++];
      curr += a[ap++];
      mc++;
      ac++;
    }
    int left = M - 2 * K + common;
    int np = 0;
    for (int i = 0; i < (left); ++i) {
      long long nm = (mp < ms ? m[mp] : MOD);
      long long na = (ap < as ? a[ap] : MOD);
      long long nn = (np < ns ? n[np] : MOD);
      if (nm <= na && nm <= nn) {
        curr += nm;
        mp++;
        mc++;
      } else if (na <= nm && na <= nn) {
        curr += na;
        ap++;
        ac++;
      } else {
        curr += nn;
        np++;
      }
    }
    if (res == 0 || curr < res) res = curr;
    int map = common - 1;
    while (map >= 0) {
      curr -= ma[map--];
      mc--;
      ac--;
      if (mc < K && ac < K) {
        if (mp >= ms || ap >= as || np <= 0) {
          break;
        }
        mc++;
        ac++;
        curr += m[mp++];
        curr += a[ap++];
        curr -= n[--np];
      } else if (mc < K) {
        if (mp >= ms) {
          break;
        }
        mc++;
        curr += m[mp++];
      } else if (ac < K) {
        if (ap >= as) {
          break;
        }
        ac++;
        curr += a[ap++];
      } else {
        long long nm = (mp < ms ? m[mp] : MOD);
        long long na = (ap < as ? a[ap] : MOD);
        long long nn = (np < ns ? n[np] : MOD);
        if (nm <= na && nm <= nn) {
          curr += nm;
          mp++;
          mc++;
        } else if (na <= nm && na <= nn) {
          curr += na;
          ap++;
          ac++;
        } else {
          curr += nn;
          np++;
        }
      }
      if (res == 0 || curr < res) res = curr;
    }
  }
  if (mas == 0) {
    res = solve0(m, a, n, K, M);
  }
  cout << res << endl;
  return 0;
}
