#include <bits/stdc++.h>
using namespace std;
int n, u, r;
long long res = -1000000000000000047ll;
long long a[35], b[35], k[35], p[35];
void vyhodnot() {
  long long v = 0;
  for (int i = 0; i < (n); i++) v += k[i] * a[i];
  res = max(res, v);
}
void druha(int step);
void prva(int step) {
  if (step % 2 == 0) vyhodnot();
  if (step == 0) return;
  int z[35];
  for (int i = 0; i < (n); i++) z[i] = a[i];
  for (int i = 0; i < (n); i++) a[i] ^= b[i];
  if (step % 2 == 1) vyhodnot();
  druha(step - 1);
  for (int i = 0; i < (n); i++) a[i] = z[i];
}
void druha(int step) {
  if (step == 0) {
    vyhodnot();
    return;
  }
  int z[35];
  for (int i = 0; i < (n); i++) z[i] = a[i];
  for (int i = 0; i < (n); i++) a[i] = r + z[p[i] - 1];
  prva(step - 1);
  for (int i = 0; i < (n); i++) a[i] = r + z[p[i] - 1];
  druha(step - 1);
  for (int i = 0; i < (n); i++) a[i] = z[i];
}
int main() {
  cin >> n >> u >> r;
  for (int i = 0; i < (n); i++) cin >> a[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];
  prva(u);
  druha(u);
  cout << res << endl;
  return 0;
}
