#include using namespace std; uint64_t SEED; int next() { SEED ^= SEED << 13; SEED ^= SEED >> 7; SEED ^= SEED << 17; return SEED >> 33; } const int BS = 1 << 16; const int BC = 1 << 15; int tot[BC], stot[BC + 1]; vector vals[BC]; signed main() { int N, Q; cin >> N >> Q >> SEED; for (int i = 0; i < 10000; ++i) next(); vector A(N); for (int i = 0; i < N; ++i) A[i] = next(); sort(A.begin(), A.end()); for (int i = 0; i < N; ++i) { ++tot[A[i] / BS]; vals[A[i] / BS].emplace_back(A[i]); } for (int i = 0; i < BC; ++i) { stot[i + 1] = stot[i] + tot[i]; } int64_t ans = 0; for (int i = 0; i < Q; ++i) { int x = next(); int cnt = stot[x / BS]; cnt += lower_bound(vals[x / BS].begin(), vals[x / BS].end(), x) - vals[x / BS].begin(); ans ^= 1LL * cnt * i; } cout << ans << endl; return 0; }