import core.bitop, std.algorithm, std.ascii, std.bigint, std.conv,
    std.functional, std.math, std.numeric, std.range, std.stdio, std.string,
    std.random, std.typecons, std.container;

ulong MAX = 1_000_100, MOD = 1_000_000_007, INF = 1_000_000_000_000;
alias sread = () => readln.chomp();
alias lread(T = long) = () => readln.chomp.to!(T);
alias aryread(T = long) = () => readln.split.to!(T[]);
alias Clue = Tuple!(long, "x", long, "y", long, "h");
alias PQueue(T, alias less = "a<b") = BinaryHeap!(Array!T, less);

long cnt;

void main()
{
    long x, y, a, b, c;
    scan(x, y, a, b, c);
    auto p = aryread();
    auto q = aryread();
    auto r = aryread();
    p.sort();
    q.sort();
    r.sort();
    p ~= INF;
    q ~= INF;
    long a_iter = a - x, b_iter = b - y, c_iter = c;
    while (c_iter > 0 && min(p[a_iter], q[b_iter]) < r[c_iter - 1])
    {
        if (p[a_iter] < q[b_iter])
            a_iter++;
        else
            b_iter++;

        c_iter--;
    }
    // a_iter.writeln();
    // b_iter.writeln();
    // c_iter.writeln();
    writeln(p[a_iter .. $ - 1].sum() + q[b_iter .. $ - 1].sum() + r[max(c_iter, 0) .. $].sum());
}

void scan(TList...)(ref TList Args)
{
    auto line = readln.split();
    foreach (i, T; TList)
    {
        T val = line[i].to!(T);
        Args[i] = val;
    }
}
