n, w = map(int,input().split()) x = list(map(int,input().split())) y = list(map(int,input().split())) def GCD(a, b): while b != 0: tmp = b b = a % b a = tmp return a rng = max(x) - w if rng < 0: print(0) exit(0) dp = [[0 for _ in range(rng+1)] for _ in range(n+1)] offset = 0 for i in range(n): if x[i] < w: offset += 1 continue idx = i - offset dp[idx+1][x[i]-w] = max(y[i], dp[idx+1][x[i]-w]) for j in reversed(range(rng)): if dp[idx][j] <= 0: continue dp[idx+1][j] = max(dp[idx][j], dp[idx+1][j]) gcd = GCD(w+j, x[i]) if gcd >= w: dp[idx+1][gcd-w] = max(dp[idx+1][gcd-w], dp[idx][j]+y[i]) print(max(0,max(dp[n-offset])))