import sys def main(): sys.setrecursionlimit(1 << 25) N, K = map(int, sys.stdin.readline().split()) A = list(map(int, sys.stdin.readline().split())) C = list(map(int, sys.stdin.readline().split())) max_C = max(C) # Extend the array to handle circularity A_ext = A * 2 C_ext = C * 2 size = 2 * N # Initialize DP table dp = [[dict() for _ in range(size)] for _ in range(size)] for i in range(size): c = C_ext[i] dp[i][i][c] = A_ext[i] for L in range(2, N + 1): for i in range(size - L + 1): j = i + L - 1 current_dp = {} for k in range(i, j): left = dp[i][k] right = dp[k+1][j] for c1 in left: for c2 in right: if abs(c1 - c2) > K: continue total = left[c1] + right[c2] # Choose c1 if c1 in current_dp: if total > current_dp[c1]: current_dp[c1] = total else: current_dp[c1] = total # Choose c2 if c2 in current_dp: if total > current_dp[c2]: current_dp[c2] = total else: current_dp[c2] = total dp[i][j] = current_dp max_val = 0 for i in range(size): for j in range(i, min(i + N, size)): current_dict = dp[i][j] for key in current_dict: if current_dict[key] > max_val: max_val = current_dict[key] print(max_val) if __name__ == "__main__": main()