/*
TASK:socks
LANG:C++
*/

#include <iostream>
#include <stdio.h>

using namespace std;
int off,k,sc[50],i,j,a,times[50][50],d,m,last,q,r;
double price[50],pr;
char p[25];
int main()
{
    cin>>off>>k;
    sc[0]=1;
    for(i=1;i<=off;i++)
    {
	    cin>>a;
	    sc[i]=sc[i-1]*a;
    }
    for(i=0;i<=off;i++)
	    cin>>price[i];
    /* for(i=1;i<=off;i++)
	    for(j=0;j<i;j++)
	        times[i][j]=(int)(price[i]/price[j]); */
    pr=(k/sc[off])*price[off];
    k%=sc[off];
	last=off;
	while(k)
	{
		//cout<<"k: "<<k<<"; pr: "<<pr<<"; last: "<<last<<"\n";
		d=k/sc[last-1];
		m=k%sc[last-1];
		if(last>2)
		{
		    if(d*price[last-1]+(m/sc[last-2])*price[last-2]+(((m/sc[last-2])%sc[last-2])/sc[last-3])*price[last-3]>price[last])
			{
		        k=0;
			    pr+=price[last];
			}
		    else
			{
			    last--;
			    pr+=d*price[last];
			    k=m;
			}
			continue;
		}
		if(last>1)
		{
		    if(d*price[last-1]+(m/sc[last-2])*price[last-2]>price[last])
			{
		        k=0;
			    pr+=price[last];
			}
		    else
			{
			    last--;
			    pr+=d*price[last];
			    k=m;
			}
			continue;
		}
        if(d*price[last-1]>price[last])
		{
		    k=0;
			pr+=price[last];
		}
		else
		{
			last--;
			pr+=d*price[last];
			k=m;
		}
	}
	sprintf(p,"%.2f",pr);
	i=0;
	/* while(1)
	{
		cout<<p[i];
		if(p[i]=='.')
		{
			cout<<p[i+1]<<p[i+2]<<"\n";
			break;
		}
		i++;
	} */
	cout<<p<<"\n";
    return 0;
}