# https://yukicoder.me/problems/no/2423 def main(): N, K = map(int, input().split()) A = list(map(int, input().split())) C = list(map(int, input().split())) dp = [[-1] * (N) for _ in range(N)] answer = 0 for i in range(N): c_bit = (1 << (C[i] - 1)) dp[i][i] = c_bit answer = max(answer, A[i]) for length in range(2, N + 1): ans = 0 for i in range(length - 1): ans += A[i] for l in range(N): r = l + length - 1 r_mod = (l + length - 1) % N ans += A[r_mod] ans_bit = 0 for mid in range(l, r): mid_mod = mid % N mid_mod1 = (mid + 1) % N bit_l = dp[l][mid_mod] bit_r = dp[mid_mod1][r_mod] for k in range(K + 1): if (bit_l << k) & bit_r > 0: x = (bit_l << k) & bit_r ans_bit |= x ans_bit |= (x >> k) for k in range(1, K + 1): if (bit_l >> k) & bit_r > 0: x = (bit_l >> k) & bit_r ans_bit |= x ans_bit |= (x << k) dp[l][r_mod] = ans_bit if ans_bit > 0: answer = max(answer, ans) ans -= A[l] print(answer) if __name__ == "__main__": main()