/* -*- coding: utf-8 -*- * * 3502.cc: No.3502 GCD Knapsack - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_N = 200000; const int MAX_X = 200000; /* typedef */ using ll = long long; /* global variables */ int xs[MAX_N], ys[MAX_N]; ll yss[MAX_X + 1]; /* subroutines */ /* main */ int main() { int n, w; scanf("%d%d", &n, &w); for (int i = 0; i < n; i++) scanf("%d", xs + i); for (int i = 0; i < n; i++) scanf("%d", ys + i); for (int i = 0; i < n; i++) { for (int p = 1; p * p <= xs[i]; p++) if (xs[i] % p == 0) { if (p >= w) yss[p] += ys[i]; int q = xs[i] / p; if (q != p && q >= w) yss[q] += ys[i]; } } ll maxysum = *max_element(yss + w, yss + MAX_X + 1); printf("%lld\n", maxysum); return 0; }