#include <bits/stdc++.h>
#define INF 1000000000000000000LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

ll gcd(ll x,ll y){
	if(y==0)return x;
	return gcd(y,x%y);
}

ll mul(ll x,ll y){
	ll res=0;
	while(y>0LL){
		if(res+x>INF)return INF+1LL;
		if(y&1LL)res+=x;
		x+=x;
		y>>=1LL;
	}
	return res;
}

ll lcm(ll x,ll y){
	return mul(x/gcd(x,y),y);
}


int n;
ll m;
ll a[21];
double p[21];
double pos[1<<20];
ll val[1<<20];
vector<ll> vec;

int main(void){
	scanf("%d%lld",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	for(int i=0;i<n;i++){
		int b;
		scanf("%d",&b);
		p[i]=(double)b/100.0;
	}
	for(int i=0;i<(1<<n);i++){
		ll v=0;
		double po=1.0;
		for(int j=0;j<n;j++){
			if(i>>j & 1){
				if(v==0)v=a[j];
				else v=lcm(v,a[j]);
				po*=p[j];
			}else{
			}
		}
		vec.push_back(v);
		val[i]=v;
		pos[i]=po;
	}
	sort(vec.begin(),vec.end());
	vec.erase(unique(vec.begin(),vec.end()),vec.end());
	double ans=0.0;
	for(int i=1;i<(1<<n);i++){
		int vi=lower_bound(vec.begin(),vec.end(),val[i])-vec.begin();
		ll cnt=m/val[i];
		if(__builtin_popcount(i)%2==1)ans+=cnt*pos[i];
		else{
			ans-=cnt*pos[i];
		}
	}
	printf("%.9f\n",ans);
	return 0;
} 
