/*
TASK:socks
LANG:C++
*/
# include <stdio.h>
# define MAXN (1<<6)

int long n,k;
int long data[MAXN];
double price[MAXN];
int used[MAXN];

void read() {
    int a;
    scanf("%ld %ld", &n,&k);
    data[0] = 1;
    for(int i = 1; i <= n; i++) {
          scanf("%ld", &a);
          data[i] = data[i-1]*a;
    }
    for(int i = 0; i <= n; i++) {
         scanf("%lf", &price[i]);
         used[i] = 0;
    }
    /*for(int i = 0; i<=n; i++) {
         printf("%ld ", data[i]);
    }*/
}

void print(double rslt) {
     printf("%.2lf\n", rslt);
}

void solve() {
     double ans = 0.0;
     int long last;

     while(k > 0) {
           last = -1;
           for(int i = n; i >= 0; i--) {
                if(last != -1 && data[i] < k) break;
                if(used[i] == 0) last = i;
                if(k >= data[i] && used[i] == 0) break;


           }
           used[last] =1;
           k = k - data[last];
           ans+= price[last];

           if( k <= 0) break;
     }
     print(ans);
}

int main() {
    read();
    solve();

return 0;
}
