#include <cstdio>
#include <iostream>
#include <map>
using namespace std;
constexpr int N = 51145;
int n;
long long a[N];
long long b[N];
bool c[N];
map<long long, long long> dp[N];
long long dfs (int id, long long now) {
if (id > n) {
return dp[id][now] = now;
}
long long num1 = now ^ a[id];
long long num2 = now ^ b[id];
long long res1, res2;
if (dp[id + 1].count(num1)) {
res1 = dp[id + 1][num1];
}
else {
res1 = dfs (id + 1, num1);
}
if (dp[id + 1].count(num2)) {
res2 = dp[id + 1][num2];
}
else {
res2 = dfs (id + 1, num2);
}
if (c[id]) {
return dp[id][now] = max (res1, res2);
}
return dp[id][now] = min (res1, res2);
}
int main () {
freopen ("mirror.in", "r", stdin);
freopen ("mirror.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
cin >> b[i];
}
for (int i = 1; i <= n; i++) {
cin >> c[i];
}
cout << dfs (1, 0) << endl;
return 0;
}