/*
TASK:socks
LANG:C++
*/
#include <iostream>
#include <iomanip>
using namespace std;
unsigned long long a[31]; // paketi
double prices[31];
int n;   // broi oferti
unsigned long long sum;
double pay=0;
void find();
int main()
{
    cin >> n;
    cin >> sum;
    a[0] = 1;
    for (int i=1;i < n+1;i++)
     cin >> a[i];
    
    for (int i=0;i < n+1;i++)
     cin >> prices[i];
     
    for (int i=1;i < n+1;i++)
     a[i] = a[i] * a[i-1];
     
    find();
    cout << setiosflags(ios::fixed) << setprecision(2) <<  pay;
    return 0;
}

void find()
{
     int i;
     for (i=0;(sum >= a[i])and(i < n+1);)
      i++; 
     i--;
     sum -= a[i];
     pay += prices[i];
     double diff_1;
     unsigned long diff_2;
     int j=1; // kolko puti
     bool x = true;
     while (x)
     {
           diff_2 += a[i-1];
           if (diff_2 >= sum) break;
           j++;
     }

     diff_1 = prices[i-1] * j;
     
     if (diff_1 < prices[i])
     {
              sum -= diff_2;
              pay += diff_1;
     }
     else
     {
         sum -= a[i];
         pay += prices[i];
     }  
}
