#include using namespace std; using ll = long long; using ull = unsigned long long; #define rep(i,a,b) for (int i=a; i=b; i--) #define fore(i,a) for(auto &i:a) #define pb push_back #define _GLIBCXX_DEBUG template inline bool chmin(T& a, const T& b) {bool c=a>b; if(a>b) a=b; return c;} template inline bool chmax(T& a, const T& b) {bool c=a inline T gcd(T a,T b) {return (b==0)?a:gcd(b,a%b);} template inline T lcm(T a, T b) {return (a*b)/gcd(a,b);} const int inf = INT_MAX / 2; const ll infl = 1LL << 60; using vi = vector; using vvi = vector>; using vvvi = vector>>; using vll = vector; using vvll = vector>; using vvvll = vector>>; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n,w; cin >> n >> w; bool flag = false; vll g(200001, 0); vll X(n), Y(n); rep(i,0,n){ cin >> X[i]; } rep(i,0,n){ cin >> Y[i]; } rep(i,0,n){ ll x = X[i]; ll y = Y[i]; if(x < w) continue;//予選落ち if(!flag and x >= w){ flag = true; } if(flag){ rep(j,w,floor(sqrt(x))+1){ if(x % j == 0){ g[j] += y; if(j*j != x) g[x/j] += y; } } g[x] += y;//最後 } } /*rep(i,0,10){ cout << g[i] << " "; } cout << endl;*/ ll ans = 0; if(!flag){ cout << 0 << endl; } else{ rep(i,w,200001){ chmax(ans, g[i]); } cout << ans << endl; } cout << fixed << setprecision(30); return 0; }