#include <bits/stdc++.h>
using namespace std;
int b[30], k[30], p[30];
int n, u, r;
long long int meilleur = -100000000000000000;
void parcours(int a[30], int combien, bool xorpermis) {
  int s[30], i;
  long long int possible = 0;
  if ((u - combien) % 2 == 0) {
    for (i = 0; i < n; i++)
      possible += (long long int)k[i] * (long long int)a[i];
    if (possible > meilleur) meilleur = possible;
  }
  if (u == combien) return;
  if (xorpermis) {
    for (i = 0; i < n; i++) s[i] = a[i] ^ b[i];
    parcours(s, combien + 1, false);
  }
  for (i = 0; i < n; i++) {
    s[i] = a[p[i] - 1] + r;
  }
  parcours(s, combien + 1, true);
}
int main() {
  int a[30];
  int i;
  cin >> n >> u >> r;
  for (i = 0; i < n; i++) cin >> a[i];
  for (i = 0; i < n; i++) cin >> b[i];
  for (i = 0; i < n; i++) cin >> k[i];
  for (i = 0; i < n; i++) cin >> p[i];
  parcours(a, 0, true);
  cout << meilleur << endl;
  return 0;
}
