#include <bits/stdc++.h>
using namespace std;
const int MAXN = 33;
const long long OO = (1LL << 60);
long long a[MAXN][MAXN];
long long b[MAXN];
int p[MAXN];
long long k[MAXN];
int n, u, r;
long long best(int cnt, bool onlyB = false) {
  long long res = -OO;
  if ((u - cnt) % 2 == 0) {
    res = 0;
    for (int i = 0; i < (n); i++) res += a[cnt][i] * k[i];
    if (cnt == u) return res;
  }
  for (int i = 0; i < (n); i++) {
    a[cnt + 1][i] = a[cnt][p[i]] + r;
  }
  res = max(res, best(cnt + 1));
  if (not onlyB) {
    for (int i = 0; i < (n); i++) a[cnt + 1][i] = a[cnt][i] ^ b[i];
    res = max(res, best(cnt + 1, true));
  }
  return res;
}
int main() {
  cin >> n >> u >> r;
  for (int i = 0; i < (n); i++) cin >> a[0][i];
  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];
    p[i]--;
  }
  cout << best(0) << endl;
  return 0;
}
