{
TASK:socks
LANG:PASCAL
}
var
    N,e:integer;
    Pack:array[0..30]of int64;
    Cost:array[0..30]of real;
    Sum:real;
    K:int64;

procedure ReadIN;
var i,x:integer;
   begin
      readln(N,K);
      Pack[0]:=1;
      for i:=1 to n do
      begin
        read(x);
        x:=x*Pack[i-1];
        Pack[i]:=x;
      end;
      for i:=0 to n do
        read(Cost[i]);
   end;

procedure WriteOut;
begin
  writeln(Sum:5:2);
  halt;
end;

procedure Find(F,S:integer);
var i:integer;
    Temp:real;
   begin
     if Pack[F]<=K then
     begin
        K:=K-Pack[F];
        Sum:=Sum+Cost[F];
     end
     else
     if Pack[S]>=K then
     begin
       Temp:=Sum+Cost[S];
       Sum:=Sum+Cost[F];
       if Temp<Sum then Sum:=Temp;
       WriteOut;
     end
     else
     for i:=2 to 30 do
        if Pack[S]*i>=K then
     begin
       Temp:=Sum+Cost[S]*i;
       Sum:=Sum+Cost[F];
       if Temp<Sum then Sum:=Temp;
       WriteOut;
     end;

     if K<=0 then WriteOut;
   end;

begin
  ReadIn;
  for e:=N downto 1 do
     Find(e,e-1);
end.
