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())) INF = -10**18 MAX_COLOR = 50 # 处理环状结构,复制数组 A = A * 2 C = C * 2 max_length = N # 初始化dp dp = [[[INF for _ in range(MAX_COLOR+1)] for __ in range(2*N)] for ___ in range(2*N)] for i in range(2*N): c = C[i] dp[i][i][c] = A[i] for length in range(2, max_length + 1): for i in range(2*N): j = i + length - 1 if j >= 2*N: break for k in range(i, j): for c1 in range(1, MAX_COLOR + 1): if dp[i][k][c1] == INF: continue for c2 in range(1, MAX_COLOR + 1): if dp[k+1][j][c2] == INF: continue if abs(c1 - c2) <= K: new_sum = dp[i][k][c1] + dp[k+1][j][c2] if new_sum > dp[i][j][c1]: dp[i][j][c1] = new_sum if new_sum > dp[i][j][c2]: dp[i][j][c2] = new_sum max_result = 0 for i in range(N): for j in range(i, 2*N): if j - i + 1 > N: continue for c in range(1, MAX_COLOR + 1): if dp[i][j][c] > max_result: max_result = dp[i][j][c] print(max_result) if __name__ == "__main__": main()