#include <bits/stdc++.h>

#ifndef This_is_Kunteynir
#define dbg(...)
#endif

#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi")

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define len(x) ((int)x.size())

using namespace std;
using ll = long long;
using ld = long double;
using i128 = __int128;
#define int ll

void solve() {
    int n, l;
    cin >> n >> l;
    l = abs(l);
    vector <int> x(n);
    for (int i = 0; i < n; ++i){
        cin >> x[i];
    }
    vector <int> c(n);
    for (int i = 0; i < n; ++i){
        cin >> c[i];
    }
    const int inf = 1e18;
    vector <vector <int>> dp(n + 1, vector <int> (3001, inf));
    dp[0][0] = 0;
    for (int i = 1; i <= n; ++i){
        dp[i] = dp[i - 1];
        for (int j = 0; j <= 3000; ++j){
            dp[i][__gcd(j, x[i - 1])] = min(dp[i][__gcd(j, x[i - 1])], dp[i - 1][j] + c[i - 1]);
        }
    }
    int ans = inf;
    for (int j = 1; j <= l; ++j){
        if (!(l % j)){
            ans = min(ans, dp[n][j]);
        }
    }
    cout << (ans == inf ? -1 : ans);
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int _ = 1;
    cin >> _;
    while (_--) {
        solve();
        cout << '\n';
    }
}
