{
TASK:socks
LANG:PASCAL
}

type
long=1..1073742000;
chorapi=record
              br:long;
              lv:real;
             end;
var p:array[0..33]of chorapi;
    i,j,n,k,pack,add,broi,min:longint;
    pari,lower:real;


 function needed(n:longint):longint;
  begin
   needed:=1+k div p[n].br;
  end;

 begin
  readln(n,k);
  pack:=1;
  p[0].br:=pack;

  for i:=1 to n do
   begin
    read(add);
    pack:=pack*add;
    p[i].br:=pack;
   end;

  read(p[0].lv);
  for i:=1 to n do
   read(p[i].lv);


  for i:=0 to n do
   if p[i].br=k then
    begin
     writeln(p[i].lv);
     exit;
    end;



  for i:=n downto 0 do
   if k>p[i].br then
    begin
     broi:=k div p[i].br;
     pari:=pari+broi*p[i].lv;
     k:=k-broi*p[i].br;
     min:=i-1;
     lower:=p[i-1].lv*needed(min);
     for j:=i-2 to 0 do
      if lower > p[j].lv*needed(j) then
       begin
        min:=j;
        lower:=p[j].lv*needed(min);
       end;
     k:=k-p[min].br;
     pari:=pari+p[min].lv;
     break;
    end;


  writeln(pari:0:2);
  readln;
 end.