Problem:
Score : 300 points

Problem Statement

You've come to your favorite store Infinitesco to buy some ice tea.

The store sells ice tea in bottles of different volumes at different costs.
Specifically, a 0.25-liter bottle costs Q yen, a 0.5-liter bottle costs H yen, a 1-liter bottle costs S yen, and a 2-liter bottle costs D yen.
The store has an infinite supply of bottles of each type.

You want to buy exactly N liters of ice tea. How many yen do you have to spend?

Constraints

1 \leq Q, H, S, D \leq 10^8

1 \leq N \leq 10^9

All input values are integers.

Input

Input is given from Standard Input in the following format:

Q H S D
N

Output

Print the smallest number of yen you have to spend to buy exactly N liters of ice tea.

Sample Input 1

20 30 70 90
3

Sample Output 1

150

Buy one 2-liter bottle and two 0.5-liter bottles. You'll get 3 liters for 90 + 30 + 30 = 150 yen.

Sample Input 2

10000 1000 100 10
1

Sample Output 2

100

Even though a 2-liter bottle costs just 10 yen, you need only 1 liter.
Thus, you have to buy a 1-liter bottle for 100 yen.

Sample Input 3

10 100 1000 10000
1

Sample Output 3

40

Now it's better to buy four 0.25-liter bottles for 10 + 10 + 10 + 10 = 40 yen.

Sample Input 4

12345678 87654321 12345678 87654321
123456789

Sample Output 4

1524157763907942

Solution in Pascal (FPC 2.6.2) (judge verdict: Accepted)

var cc : array [1..4] of int64 ;
    so : array [1..4] of real ;
    a,b,c,d,e,f,g : longint ;
    sum,count,h,i,o,j,k,l : int64 ;

procedure swap(var x,y : int64) ;
var z : int64;
begin
 z:=x;
 x:=y;
 y:=z;
end;
procedure swap2(var x,y : real) ;
var z : real;
begin
 z:=x;
 x:=y;
 y:=z;
end;

begin
 for a:=1 to 4 do
  begin
   read(cc[a]);
  end;
 so[1]:=1;
 so[2]:=1;
 so[3]:=1;
 so[4]:=2;
 cc[1]:=cc[1]*4;
 cc[2]:=cc[2]*2;
 for a:=1 to 3 do
  for b:=1 to 3 do
   if cc[b]*(1/so[b])>cc[b+1]*(1/so[b+1]) then
    begin
     swap(cc[b],cc[b+1]);
     swap2(so[b],so[b+1]);
    end;
//    for a:=1 to 4 do  write(cc[a]:5);
    readln(sum);
  while sum>0 do
   begin
    for a:=1 to 4 do
     begin
      if sum=0 then
       break
      else if so[a]<=sum then
       begin
//        writeln(cc[a]);
        if so[a]<>2 then
         begin
          count:=count+cc[a]*sum;
          sum:=0;
          break;
         end
        else
         begin
          count:=count+cc[a]*(sum div 2);
          sum:=sum-(sum div 2)*2;
         end;
       end;
     end;
   end;
  writeln(count);
end.