프로그래밍 대결 대회

N명의 참가자가 치르는 결투 일정을 정한다. 실력이 높은 쪽이 항상 이기고 각 참가자는 최대 L_i번 결투할 수 있을 때, 모든 결투의 XOR 관심도 합에서 피로도를 뺀 값이 최대가 되게 하라.

어려움8그리디트리동적 계획법조합론아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

온조는 NN명이 참가하는 프로그래밍 대결 대회를 연다. 이 대회는 두 참가자가 일대일로 맞붙는 N1N-1번의 대결로 진행된다. ii번 참가자의 실력은 AiA_i이고, 실력이 같은 참가자는 없다. 두 참가자가 대결하면 실력이 더 높은 쪽이 이기고, 진 쪽은 탈락해 더 이상 대결하지 못한다. 대결 한 번마다 한 명씩 탈락하므로 N1N-1번의 대결이 끝나면 한 명만 남고, 그 사람이 우승자가 된다.

실력이 xx인 참가자와 실력이 yy인 참가자가 맞붙은 대결의 흥미로움은 xyx \oplus y로 정의한다. 여기서 \oplus는 비트 단위 XOR이다. 한편 ii번 참가자는 대결을 한 번 치를 때마다 피로도가 HiH_i만큼 쌓인다. 즉 ii번 참가자가 대결을 kk번 치렀다면 이 참가자의 총 피로도는 Hi×kH_i \times k이다. 또 ii번 참가자는 대결을 최대 LiL_i번까지만 치를 수 있다.

대회의 재미는 모든 대결의 흥미로움을 합한 값에서 모든 참가자의 피로도를 합한 값을 뺀 값이다. 대회의 재미는 음수가 될 수 있다. 누가 언제 누구와 맞붙느냐에 따라 대회의 재미가 달라진다.

예를 들어 실력이 각각 11, 33, 55이고 HH가 각각 66, 22, 44이며 LL이 각각 22, 22, 22인 참가자 세 명을 생각해 보자. 먼저 1번과 2번이 맞붙으면 실력이 더 높은 2번이 이기고 1번이 탈락한다. 이 대결의 흥미로움은 A1A2=13=2A_1 \oplus A_2 = 1 \oplus 3 = 2이다. 이어서 2번과 3번이 맞붙으면 3번이 이기고 2번이 탈락하며, 이 대결의 흥미로움은 A2A3=35=6A_2 \oplus A_3 = 3 \oplus 5 = 6이다. 흥미로움의 합은 2+6=82 + 6 = 8이고, 세 참가자가 치른 대결 수가 각각 1번, 2번, 1번이므로 피로도의 합은 6×1+2×2+4×1=146 \times 1 + 2 \times 2 + 4 \times 1 = 14이다. 따라서 대회의 재미는 814=68 - 14 = -6이다. 모든 참가자가 LiL_i번 이하로 대결했으니 조건도 지켰고, 이보다 재미를 크게 만드는 방법은 없다.

NNA1A_1부터 ANA_N, H1H_1부터 HNH_N, L1L_1부터 LNL_N이 주어질 때, 조건을 모두 지키면서 얻을 수 있는 대회의 재미의 최댓값을 구하여라.

입력

첫째 줄에 참가자 수 NN이 주어진다. (2N3002 \le N \le 300)

둘째 줄에 A1A_1부터 ANA_N까지 NN개의 정수가 공백으로 구분되어 주어진다. (1Ai1061 \le A_i \le 10^6) AiA_i는 모두 서로 다르다.

셋째 줄에 H1H_1부터 HNH_N까지 NN개의 정수가 공백으로 구분되어 주어진다. (1Hi1061 \le H_i \le 10^6)

넷째 줄에 L1L_1부터 LNL_N까지 NN개의 정수가 공백으로 구분되어 주어진다. (2LiN12 \le L_i \le N-1)

출력

첫째 줄에 조건을 모두 지키면서 만들 수 있는 대회의 재미의 최댓값을 출력한다.