/*
TASK:socks
LANG:C++
*/
#include <stdio.h>
#include <algorithm>
using namespace std;

typedef struct{
        long num;
        float price;
        float ss;
}A;

A masivec[32],b;
long n,k,a,asd;
int i,dae,j;
double sum,dae1;

bool cmpc(A x,A y){
     if(x.ss>y.ss) return 1;
     return 0;
}

int main(){
    scanf("%d %ld",&n,&k);
    masivec[1].num=1;
    for(i=1;i<=n;i++){
                      scanf("%d",&a);
                      masivec[i+1].num=(long)masivec[i].num*a;
    }
    for(i=1;i<=n+1;i++){
                        scanf("%f",&masivec[i].price);
                        masivec[i].ss=masivec[i].num/masivec[i].price;
    }
    //sort(masivec+1,masivec+n+2,cmpc);
    for(i=1;i<=n;i++){
                      dae=i;
                      dae1=masivec[dae].ss;
                      for(j=i+1;j<=n+1;j++){
                                            if(dae1<masivec[j].ss){
                                                                   dae1=masivec[j].ss;
                                                                   dae=j;
                                            }
                      }
                      if(dae!=i){
                                 b=masivec[dae];
                                 masivec[dae]=masivec[i];
                                 masivec[i]=b;
                      }
    }
    for(i=1;i<=n+1;i++){
                        if(k<=0) break;
                        asd=k/masivec[i].num;
                        k=k<masivec[i].num?0:k%masivec[i].num;
                        if(asd==0) asd=1;
                        sum+=asd*masivec[i].price;
    }
    printf("%.2f\n",sum);
    return 0;
}
