import std;

alias sread = () => readln.chomp();
alias lread = () => readln.chomp.to!long();
alias aryread(T = long) = () => readln.split.to!(T[]);
//aryread!string();
//auto PS = new Tuple!(long,string)[](M);
//x[]=1;でlong[]全要素1に初期化
void main()
{
    long q, h, s, d;
    scan(q, h, s, d);
    // writeln(q, ' ', h, ' ', s, ' ', d);
    auto n = lread();
    // writeln(n, "L買いたい");
    long x = 4 * q; //0.25で作った1
    long y = 2 * h; //0.5で作った1
    // writeln("1: ", s);
    // writeln("0.25で作った1: ", x);
    // writeln("0.5で作った1: ", y);
    // writeln("2: ", d);
    // writeln("0.25で作った2: ", x * 2);
    // writeln("0.5で作った2: ", y * 2);
    long min_1 = min(s, x, y);
    long min_2 = min(d, x * 2, y * 2, min_1 * 2);
    // writeln(min_1);
    // writeln(min_2);
    if (n == 1)
    {
        writeln(min_1);
        return;
    }
    if (n % 2 != 0)
    {
        writeln(min((n / 2) * min_2 + min_1, min_1 * n));
        return;
    }
    else
    {
        writeln(min(min_1 * n, min_2 * (n / 2)));
        return;
    }

}

void scan(L...)(ref L A)
{
    auto l = readln.split;
    foreach (i, T; L)
    {
        A[i] = l[i].to!T;
    }
}

void arywrite(T)(T a)
{
    a.map!text.join(' ').writeln;
}
