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 INF = float('-inf') MAX_COLOR = 51 allow = [ [False]*MAX_COLOR for _ in range(MAX_COLOR) ] for c1 in range(MAX_COLOR): for c2 in range(MAX_COLOR): if abs(c1 - c2) <= K: allow[c1][c2] = True A_prime = A*2 C_prime = C*2 dp = [ [ [INF]*MAX_COLOR for _ in range(2*N) ] for __ in range(2*N) ] for i in range(2*N): c = C_prime[i] a = A_prime[i] dp[i][i][c] = a for l in range(2, N+1): for i in range(2*N): j = i + l -1 if j >= 2*N: continue for k in range(i, j): for c1 in range(MAX_COLOR): if dp[i][k][c1] == INF: continue for c2 in range(MAX_COLOR): if dp[k+1][j][c2] == INF: continue if allow[c1][c2]: merged = dp[i][k][c1] + dp[k+1][j][c2] if merged > dp[i][j][c1]: dp[i][j][c1] = merged if merged > dp[i][j][c2]: dp[i][j][c2] = merged max_magic = 0 for i in range(N): for l in range(1, N+1): j = i + l -1 if j >= 2*N: continue for c in range(MAX_COLOR): if dp[i][j][c] > max_magic: max_magic = dp[i][j][c] print(max_magic) if __name__ == '__main__': main()