Arkady and Masha want to choose decorations for thier aquarium in Fishdom game. They have n decorations to choose from, each of them has some cost. To complete a task Arkady and Masha need to choose exactly m decorations from given, and they want to spend as little money as possible.

There is one difficulty: Masha likes some a of the given decorations, Arkady likes some b of the given decorations. Some decorations may be liked by both Arkady and Masha, or not be liked by both. The friends want to choose such decorations so that each of them likes at least k decorations among the chosen. Help Masha and Arkady find the minimum sum of money they need to spend.

Input

The first line contains three integers n, m and k (1 ≤ n ≤ 200000, 1 ≤ m ≤ n, 1 ≤ k ≤ n) — the number of decorations, how many decorations the friends should choose, how many decorations each of them should like among the chosen.

The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 109) — decorations costs.

The third line contains single integer a (1 ≤ a ≤ n) — the number of decorations liked by Masha. The fourth line contains a distinct integers x1, x2, ..., xa (1 ≤ xi ≤ n) — the ids of decorations liked by Masha.

The next two lines describe decorations liked by Arkady in the same format.

Output

Print single integer: the minimum sum of money the friends should spend to fulfill all constraints. If it is not possible, print -1.

Examples

Input

4 3 2
3 2 2 1
2
1 2
2
1 3


Output

7


Input

4 3 2
3 2 2 1
2
1 2
3
4 1 3


Output

6


Input

4 2 2
3 2 2 1
2
1 2
3
4 1 3


Output

-1

Note

In the first example the only possible variant to choose 3 decorations having all conditions satisfied is to choose decorations 1, 2, 3.

In the second example friends can choose decoration 4 instead of decoration 3, because this one is one coin cheaper.

In the third example it's not possible to choose 2 decorations in a way that both are liked by both Masha and Arkady.
import java.util.*;

public class Test {

    int n, m, k;
    int[] c;
    List<List<Integer>> qs = new ArrayList<>();
    short[] mask;

    Scanner sca = new Scanner(System.in);
    long best = -1;

    void start() {

        n = sca.nextInt();
        m = sca.nextInt();
        k = sca.nextInt();
        c = new int[n + 1];
        for (int i = 0; i < n; i++) c[i + 1] = sca.nextInt();
        mask = new short[n + 1];

        {
            int d = sca.nextInt();
            for (int i = 0; i < d; i++) mask[sca.nextInt()] |= 1;

            d = sca.nextInt();
            for (int i = 0; i < d; i++) mask[sca.nextInt()] |= 2;
        }

        {
            for (int i = 0; i < 4; i++) qs.add(new ArrayList<>());
            for (int i = 1; i <= n; i++) {
                qs.get(mask[i]).add(i);
            }
        }

        solve();

        System.out.println(best);
    }

    void solve() {

        for (int i = 0; i < 4; i++) {
            Collections.sort(qs.get(i), new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return c[o1] - c[o2];
                }
            });
//            System.out.println(i + ":" + Arrays.toString(qs.get(i).toArray()));
        }
        long[][] ss = new long[4][];
        for (int i = 0; i < 4; i++) {
            List<Integer> q = qs.get(i);
            ss[i] = new long[q.size()];
            long s = 0;
            for (int j = 0; j < q.size(); j++) {
                s += c[q.get(j)];
                ss[i][j] = s;
            }
//            System.out.println(i + ":" + Arrays.toString(ss[i]));
        }

        int[] pos = null;

        for (int i = Math.min(qs.get(3).size(), m); i >= 0; i--) {
            if (qs.get(1).size() + i < k ||
                    qs.get(2).size() + i < k ||
                    n - qs.get(3).size() + i < m ||
                    k + k - i > m) {
//                if (n == 200000 && m == 64003 && k == 42211) {
//                    System.out.println(qs.get(1).size() + " " + qs.get(2).size() + " " + qs.get(3).size() + " " +i);
//                }
                continue;
            }
            int total = i;
            if (pos == null) {
                pos = new int[3];
                if (k - i > 0) {
                    pos[1] = k - i;
                    pos[2] = k - i;
                    total += 2 * (k - i);
                }
            } else {
                if (pos[1] < k - i) pos[1] = k - i;
                if (pos[2] < k - i) pos[2] = k - i;
                if (pos[0] > 0) pos[0]--;
                if (pos[0] > 0) pos[0]--;
                total += pos[0] + pos[1] + pos[2];
            }

            for (; total < m; total++) {
                int min = 0, minq = -1;
                for (int s = 0; s < 3; s++) {
                    List<Integer> q = qs.get(s);
                    if (pos[s] < q.size()) {
                        int id = q.get(pos[s]);
                        if (minq < 0 || c[id] < c[min]) {
                            min = id;
                            minq = s;
                        }
                    }
                }
                pos[minq]++;
            }

            long cost = 0;
            if (i > 0) cost += ss[3][i - 1];
            for (int s = 0; s < 3; s++)
                if (pos[s] > 0) cost += ss[s][pos[s] - 1];

            best = best < 0 ? cost : Math.min(best, cost);
        }
    }

    public static void main(String[] args) {
        new Test().start();
    }
}

