#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 61;
int n, r;
long long a[30], b[30], k[30], p[30];
long long dfs(int u, bool op1) {
  long long res = -INF;
  if (u % 2 == 0) res = max(res, inner_product(a, a + n, k, 0LL));
  if (u == 0) return res;
  if (!op1) {
    for (int i = 0; i < (n); i++) a[i] ^= b[i];
    res = max(res, dfs(u - 1, true));
    for (int i = 0; i < (n); i++) a[i] ^= b[i];
  }
  long long tmp[30];
  memcpy(tmp, a, sizeof a);
  for (int i = 0; i < (n); i++) a[i] = tmp[p[i]] + r;
  res = max(res, dfs(u - 1, false));
  memcpy(a, tmp, sizeof a);
  return res;
}
int main() {
  int u;
  scanf("%d%d%d", &n, &u, &r);
  for (int i = 0; i < (n); i++) scanf("%I64d", a + i);
  for (int i = 0; i < (n); i++) scanf("%I64d", b + i);
  for (int i = 0; i < (n); i++) scanf("%I64d", k + i);
  for (int i = 0; i < (n); i++) scanf("%I64d", p + i), p[i]--;
  printf("%I64d\n", dfs(u, false));
  return 0;
}
