func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, u, r;   long long a[31], b[31], k[31], p[31];   int op[31];   long long res = -(1e18);   void doit(int);   int main() {     cin >> n >> u >> r;     for (int i = 1; i <= n; i++) cin >> a[i];     for (int i = 1; i <= n; i++) cin >> b[i];     for (int i = 1; i <= n; i++) cin >> k[i];     for (int i = 1; i <= n; i++) cin >> p[i];     for (int i = 1; i <= u; i++) op[i] = -1;     doit(1);     cout << res << endl;     return 0;   }   void doit(int i) {     if ((u - i + 1) % 2 == 0) {       long long cur = 0;       for (int j = 1; j <= n; j++) cur = cur + a[j] * k[j];       if (res < cur) res = cur;       if (i > u) return;     }     int hi = 0;     int lo = 1;     if (i > 1 && op[i - 1] == 0) hi++;     for (int j = hi; j <= lo; j++) {       op[i] = j;       long long c[31];       if (j == 0) {         for (int t = 1; t <= n; t++) a[t] = a[t] ^ b[t];       } else {         for (int t = 1; t <= n; t++) c[t] = a[t];         for (int t = 1; t <= n; t++) a[t] = c[p[t]] + r;       }       doit(i + 1);       op[i] = -1;       if (j == 0)         for (int t = 1; t <= n; t++) a[t] = a[t] ^ b[t];       else         for (int t = 1; t <= n; t++) a[t] = c[t];     }   }   