/*
TASK:socks
LANG:C++
*/
#include<iostream>
#include<stdio.h>
using namespace std;
long long int P[31],broj,n,c,l=0,Maxp;float Min;
float cena[31];
void rec(int pos,float dc,long long int db)
{
     if(dc>Min)return;
     else
     if(db>=broj&&dc<Min){Min=dc;return;}
     if(pos==0)return;
     int y=(broj-db)/P[pos];
     rec(pos-1,(dc+y*cena[pos]),(db+y*P[pos]));
     y++;
 rec(pos-1,(dc+y*cena[pos]),(db+y*P[pos]));

 }
int main()
{int k;
cin>>k>>broj;
int i;
n=k+1;
P[1]=1;
for(i=1;i<=k;i++)
{cin>>c;
		 P[i+1]=P[i]*c;
		 if(P[i+1]>=broj&&l==0){Maxp=i+1;}
}
for(i=1;i<=n;i++)
cin>>cena[i];

if(Maxp!=0)Min=P[Maxp];
else
Min=99999;
if(P[Maxp]==broj)cout<<cena[Maxp]<<endl;
else

{if(Maxp==0)Maxp=n+1;
    rec((Maxp-1),0,0);
printf("%0.2f\n",Min);
}
}
