def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 K = int(input[idx]) idx += 1 A = list(map(int, input[idx:idx+N])) idx += N C = list(map(int, input[idx:idx+N])) idx += N # 复制数组以处理环状结构 A += A[:N] C += C[:N] max_length = 2 * N dp = [[{} for _ in range(max_length)] for __ in range(max_length)] # 初始化区间长度为1 for i in range(max_length): dp[i][i][C[i]] = A[i] # 处理区间长度从2到N for l in range(2, N + 1): for i in range(max_length - l + 1): j = i + l - 1 for k in range(i, j): # 子区间i到k和k+1到j for c1 in dp[i][k]: for c2 in dp[k+1][j]: if abs(c1 - c2) <= K: total = dp[i][k][c1] + dp[k+1][j][c2] # 将total加入i-j区间的颜色c1和c2 for color in [c1, c2]: if color not in dp[i][j] or total > dp[i][j].get(color, 0): dp[i][j][color] = total # 寻找所有可能的区间i-j的最大值,其中i到j的长度不超过N max_val = 0 for i in range(max_length): for j in range(i, min(i + N, max_length)): if j - i + 1 > N: continue current = dp[i][j] for c in current: if current[c] > max_val: max_val = current[c] print(max_val) if __name__ == '__main__': main()