#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <cmath>
#include <iomanip>
#include <set>
using namespace std;
#define REP(i,n) for (int i=0;i<(n);++i)
#define rep(i,a,b) for(int i=a;i<(b);++i)
template<class T> inline bool chmin(T &a, T b){ if(a > b) { a = b; return true;} return false;}
template<class T> inline bool chmax(T &a, T b){ if(a < b) { a = b; return true;} return false;}
constexpr long INF = 1LL << 62;
constexpr int MOD = 1e9 + 7;

long gcd(long a,long b) {return b==0 ? a : gcd(b, a%b);}
long lcm(long a,long b) {return min(2e18l + 100, a / gcd(a,b) * 1.0l * b);}

long n, m, a[20], table[1<<20];
double p[20];

int main() {
    cin.tie(0); ios_base::sync_with_stdio(false); 
    cin >> n >> m;
    for(int i=0; i < n; ++i) cin >> a[i];
    for(int i=0; i < n; ++i) cin >> p[i], p[i] /= 100.0;

    for(int bit = 1; bit < (1<<n); ++bit) {
        long tmp = 1;
        for(int i = 0; i < n; ++i) 
            if(bit & (1<<i)) tmp = lcm(tmp, a[i]);
        table[bit] = m / tmp;
    }

    for(int i = 0; i < n; ++i) 
        for(int bit = 0; bit < (1<<n); ++bit)
            if(bit & (1<<i)) table[bit] -= table[bit ^ (1<<i)];

    double ans = 0.0;
    for(int bit=0; bit < (1<<n); ++bit) {
        double prob = 1.0;
        for(int i = 0; i < n; ++i) {
            if(bit & (1<<i)) prob *= p[i];
            else prob *= 1-p[i];
        }
        ans += abs(table[bit]) * prob;
    }

    cout << fixed << setprecision(10) << ans << endl;
    return 0;
}
