#pragma GCC optimize("O3")

#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;

unsigned long long seed;
int next(){
	seed = seed ^ (seed << 13);
	seed = seed ^ (seed >> 7);
	seed = seed ^ (seed << 17);
	return (seed >> 33);
}

int main(){
	int n,q;
	scanf("%d%d%llu",&n,&q,&seed);
	for(int i=0;i<10000;i++)next();
	vector<int>a(n);
	for(int i=0;i<n;i++)a[i]=next();
	sort(a.begin(),a.end());
	long long ret=0;
	for(int i=0;i<q;i++){
		int x=next();
		ret^=(long long)i*distance(a.begin(),lower_bound(a.begin(),a.end(),x));
	}
	printf("%lld\n",ret);
}