#include <bits/stdc++.h>
enum { MAXN = 35 };
long long ans = -(1ll << 60);
int n, u, r;
int a[MAXN], b[MAXN], k[MAXN], p[MAXN];
int buf[MAXN];
void go(int pos, int prev) {
  if (pos == u) {
    int i;
    long long cur = 0;
    for (i = 0; i < n; i++) cur += (1ll * a[i]) * k[i];
    if (cur > ans) ans = cur;
    return;
  }
  int temp[MAXN], i;
  for (i = 0; i < n; i++) temp[i] = a[i];
  if ((u - pos) % 2) {
    for (i = 0; i < n; i++) a[i] ^= b[i];
    go(u, 0);
    for (i = 0; i < n; i++) a[i] = temp[i];
  } else {
    go(u, 0);
  }
  if (prev != 0) {
    for (i = 0; i < n; i++) a[i] ^= b[i];
    go(pos + 1, 0);
    for (i = 0; i < n; i++) a[i] = temp[i];
  }
  for (i = 0; i < n; i++) buf[i] = a[p[i] - 1] + r;
  for (i = 0; i < n; i++) a[i] = buf[i];
  go(pos + 1, 1);
  for (i = 0; i < n; i++) a[i] = temp[i];
}
int main() {
  int i;
  scanf("%d %d %d", &n, &u, &r);
  for (i = 0; i < n; i++) scanf("%d", a + i);
  for (i = 0; i < n; i++) scanf("%d", b + i);
  for (i = 0; i < n; i++) scanf("%d", k + i);
  for (i = 0; i < n; i++) scanf("%d", p + i);
  go(0, -1);
  printf("%I64d\n", ans);
  return 0;
}
