#include #define REP(i,n) for (long i=0;i<(n);i++) #define FOR(i,a,b) for (long i=(a);i<(b);i++) #define RREP(i,n) for(long i=n;i>=0;i--) #define RFOR(i,a,b) for(long i=(a);i>(b);i--) #define dump1d_arr(array) REP(i,array.size()) cerr << #array << "[" << (i) << "] ==> " << (array[i]) << endl; #define dump2d_arr(array) REP(i,array.size()) REP(j,array[i].size()) cerr << #array << "[" << (i) << "]" << "[" << (j) << "] ==> " << (array[i][j]) << endl; #define dump(x) cerr << #x << " => " << (x) << endl; #define CLR(vec) { REP(i,vec.size()) vec[i] = 0; } #define llINF (long long) 9223372036854775807 #define loINF (long) 2147483647 #define shINF (short) 32767 #define SORT(c) sort((c).begin(),(c).end()) #define MIN(vec) *min_element(vec.begin(), vec.end()); #define MAX(vec) *max_element(vec.begin(), vec.end()); #define UNIQ(vec) vec.erase(unique(vec.begin(), vec.end()),vec.end()); #define IN(n,m) (!(m.find(n) == m.end())) #define TO_INT(vec,s) REP(i,s.length()){vec.push_back(s[i] - ‘0’);} #define ENUM_v(vec) for (auto e : vec) #define dump_MAP(m) for(auto itr = m.begin(); itr != m.end(); ++itr) { cerr << itr->first << " --> " << itr->second << endl; } using namespace std; typedef vector VI; typedef vector VVI; using ll = long long; using ull = unsigned long long; ull seed; int next() { seed = seed ^ (seed << 13); seed = seed ^ (seed >> 7); seed = seed ^ (seed << 17); return (seed >> 33); } int main(void) { int n, q; long div = 301010; ll sm = 0; cin >> n >> q >> seed; VI acc(101010,0); VVI hashed(101010,VI(0)); for (int i = 0; i < 10000; i++) next(); vector a(n); for (int i = 0; i < n; i++) { a[i] = next(); acc[a[i]/div]++; hashed[a[i]/div].push_back(a[i]); } REP(i,acc.size()-1) acc[i+1] += acc[i]; REP(i,hashed.size()) SORT(hashed[i]); for (int i = 0; i < q; i++) { ll x = next(); ll cnt = 0; ll hash = x / div; if (hash > 0) cnt += acc[hash-1]; cnt += (lower_bound(hashed[hash].begin(),hashed[hash].end(),x) - hashed[hash].begin()); sm ^= ll(cnt) * i; } cout << sm << endl; return 0; }