#include <bits/stdc++.h>
using namespace std;
const int maxn = 33;
const long long INF = (1LL) << 59;
int a[maxn][maxn], b[maxn], k[maxn], p[maxn];
int n, op, r;
long long ans = -INF;
inline void xop(int x) {
  for (int i = 0; i < n; i++) {
    a[i][x] = a[i][x - 1] ^ b[i];
  }
}
inline void aop(int x) {
  for (int i = 0; i < n; i++) {
    a[i][x] = a[p[i] - 1][x - 1] + r;
  }
}
inline long long calcVal(int x) {
  long long sum = 0;
  for (int i = 0; i < n; i++) {
    sum += a[i][x - 1] * k[i];
  }
  return sum;
}
void genRec(int ind) {
  if ((op - ind) & 1) {
    ans = max(ans, calcVal(ind));
  }
  if (ind > op) {
    return;
  }
  aop(ind);
  genRec(ind + 1);
  xop(ind);
  if ((op - ind + 1) & 1) {
    ans = max(ans, calcVal(ind + 1));
  }
  aop(ind + 1);
  genRec(ind + 2);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> op >> r;
  for (int i = 0; i < n; i++) cin >> a[i][0];
  for (int i = 0; i < n; i++) cin >> b[i];
  for (int i = 0; i < n; i++) cin >> k[i];
  for (int i = 0; i < n; i++) cin >> p[i];
  genRec(1);
  cout << ans << '\n';
  return 0;
}
