/*
TASK: socks
LANG: C++
*/
#include <cstdlib>
#include <stdio.h>
long packets[32];
float cost[32];
long n,need;
float mincost = 0,minbr = 9999999;
using namespace std;
int calc(long socks,int start)
{
         int i;
         long k[32];
         float min = 9999999;
         for(i = start;i >= 0;i--)         
         {
               k[i] = socks / packets[i];
               if(!k[i])k[i] = 1;
               if(k[i]*cost[i] < min)
               {
                           min = k[i]*cost[i];
                           mincost += min;
                           if(socks - k[i]*packets[i] <= 0)
                           {
                                    if(mincost < minbr)
                                    {
                                               minbr = mincost;
                                               mincost -=min;
                                               return 1;
                                    }
                           }
                           calc(socks - k[i]*packets[i],i-1);
                           mincost -=min;
               }
         }
         mincost += min;
         return 0;
}
int main()
{
    int i,fl = 1;
    long tmp;
    scanf("%ld %ld",&n,&need);
    packets[0] = 1;
    for(i = 1;i <= n;i++)
    {
          scanf("%ld",&tmp);
          packets[i] =  packets[i-1]*tmp;
    }
    for(i = 0; i <= n;i++)
    {
          scanf("%f",&cost[i]);
    }
    calc(need,n);
    printf("%.2f",minbr);
    return 0;
}
