题目
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define N 100010
const int M=1<<17,P=1e7+20;
int n,q,t,c1,c2,m;
int a[N];
int v[P],f[P];
vector<long long>vec,c[2],e[2];
long long g[2],ans;
inline void add(int o,int x,int k){
if(!x) return ;
if((int)c[o].size()<x+1) c[o].resize(x+1);
c[o][x]+=k;
}
inline void prework(int o,int m){
vector<int>d(vec.size());
for (int i = 1; i <= n; ++i) {
int x = a[i];
if (v[x] == v[m]) add(o, m - x, 1);
else {
add(o, v[x] - x, 1);
if (m == v[m]) add(o, m - vec[f[v[m]]-1], 1);
else g[o] += m - vec[f[v[m]]-1];
++d[f[v[x]]];
}
}
for (int i = 0; vec[i+1] < v[m]; ++i) {
if (i) d[i] += d[i-1];
add(o, vec[i+1] - vec[i], d[i]);
}
e[o].resize(c[o].size());
for (int i = 0; i < c[o].size(); ++i) {
e[o][i] = c[o][i] * i;
if (i) e[o][i] += e[o][i-1], c[o][i] += c[o][i-1];
}
}
inline long long solve(int o) {
int k = min((int)1.0 * c2 / c1, (int)c[o].size() - 1);
return (e[o][k] + g[o]) * c1 + (c[o].back() - c[o][k]) * c2;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
for(int i=2;i<P;i++){
if(!v[i]) vec.push_back(v[i]=i),f[i]=vec.size()-1;
for(int j=0;j<vec.size()&&i*vec[j]<P;j++) {
v[i * vec[j]] = 1;
if(i%vec[j]==0)
break;
}
}
for(int i=P-1;i;i--)
if(v[i]!=i) v[i]=v[i+1];
cin>>n>>q>>t;
for(int i=1;i<=n;i++) cin>>a[i],m=max(m,a[i]);
sort(a+1,a+1+n);
prework(0,m);prework(1,v[m]);
for (int i=1;i<=q;++i) {
cin>>c1>>c2,c1^=t*ans, c2^=t*ans;
cout<<(ans = min(solve(0), solve(1)))<<endl;
ans%=M;
}
return 0;
}