#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <algorithm>
#include <string>
#include <math.h>
#include <limits.h>
#include <stack>
#include <complex>
#include <stdlib.h>
#include <stdio.h>
#include <functional>
#include <cfloat>
#include <math.h>
#include <numeric>
#include <string.h>
#include <iomanip>
#include <sys/time.h>
#include <random>


#define fs first
#define sc second
#define endl "\n"

using namespace std;

typedef long long ll;
typedef unsigned int uint;
typedef pair<ll, ll> P;

// a と b の最大公約数を返す
ll gcd(ll a, ll b) {
    if (b == 0) return a;
    else return gcd(b, a % b);
}


// 素数判定
bool is_prime(ll N) {
    if (N == 1) return false;
    for (ll i = 2; i * i <= N; ++i) {
        if (N % i == 0) return false;
    }
    return true;
}


// 約数列挙
vector<ll> enum_divisors(ll N) {
    vector<ll> res;
    for (ll i = 1; i * i <= N; ++i) {
        if (N % i == 0) {
            res.push_back(i);
            if (N/i != i) res.push_back(N/i);
        }
    }
    sort(res.begin(), res.end());
    return res;
}


// 素因数分解
vector<pair<ll, ll>> prime_factorize(ll N){
    vector<pair<ll, ll>> res;
    for(ll i = 2; i * i <= N; i++){
        if(N % i != 0)  continue;
        ll ex = 0;

        while(N % i == 0){
            ex++;
            N /= i;
        }

        res.push_back({i, ex});
    }

    if(N != 1)  res.push_back({N, 1});
    return res;
};


ll lcm(ll a, ll b){
    ll x = a / gcd(a, b);
    if(LONG_LONG_MAX / x < b){
        return LONG_LONG_MAX;
    }
    else{
        return x * b;
    }
}


int main(){
    ll n, m;    cin >> n >> m;
    vector<ll> a(n); vector<double> p(n);
    for(int i = 0; i < n; i++){
        cin >> a[i];
    }
    for(int i = 0; i < n; i++){
        cin >> p[i];
        p[i] /= 100;
    }

    double res = 0;
    for(int i = 0; i < (1 << n); i++){
        int count = 0;
        double prob = 1.0;
        ll x = 1;
        for(int j = 0; j < n; j++){
            if((i >> j) % 2 == 0)   continue;
            count++;
            prob *= p[j];
            x = lcm(x, a[j]);
        }
        if(count == 0)  continue;
        else if(count % 2 == 1){
            res += prob * (m / x);
        }
        else{
            res -= prob * (m / x);
        }
    }

    printf("%.12f\n", res);


    return 0;
}

