#include using namespace std; #define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++) #define rep(i,n) repl(i,0,n) #define mp(a,b) make_pair((a),(b)) #define pb(a) push_back((a)) #define all(x) (x).begin(),(x).end() #define uniq(x) sort(all(x)),(x).erase(unique(all(x)),end(x)) #define fi first #define se second #define dbg(x) cout<<#x" = "<<((x))< ostream& operator<<(ostream& o, const pair &p){o<<"("< ostream& operator<<(ostream& o, const vector &v){o<<"[";for(T t:v){o< class SparseTable { public: vector tbl[20]; vector tbr[20]; int n; T (*op)(T, T); SparseTable(const vector &v, T (*_op)(T, T)) : op(_op){ // build table O(NlogN) n = v.size(); tbl[0].resize(n+1); tbr[0].resize(n+1); rep(i,n) tbl[0][i] = tbr[0][i] = v[i]; for(int k=1; (1<=0; i--){ if(((i+1)&mask) == 0) tbl[k][i] = v[i]; else tbl[k][i] = op(tbl[k][i+1], v[i]); } } } T query(int l, int r){ // [l,r) if(l+1 == r) return tbl[0][l]; r--; // [l,r] int k = 31 - __builtin_clz(l^r); // 2^k <= l^r < 2^{k+1} return op(tbl[k][l], tbr[k][r]); } }; int main(){ cin.tie(0); ios::sync_with_stdio(false); long n; cin>>n; vector v(n); rep(i,n) cin>>v[i]; vector id(n); rep(i,n) id[i] = i; sort(all(id), [&](const int l, const int r){ return v[l] < v[r]; }); auto lcp = [&](int p, int q){ rep(i,min(v[p].size(), v[q].size())) if(v[p][i]!=v[q][i]) return i; return (int)min(v[p].size(), v[q].size()); }; // lcp btw i,i+1 vector lcp_arr(n,0); rep(i,n-1){ lcp_arr[i] = lcp(id[i], id[i+1]); } // dbg(lcp_arr); SparseTable st(lcp_arr, [](const int l, const int r){return min(l,r);}); vector pos(n); rep(i,n) pos[id[i]] = i; long m,x,d; cin>>m>>x>>d; long ans = 0; rep(_,m){ long i = (x/(n-1)); long j = (x%(n-1)); if(i<=j) j++; int l = min(pos[i], pos[j]), r = max(pos[i], pos[j]); ans += st.query(l, r); // dbg(st.query(l,r)); x = (x+d)%(n*(n-1)); } cout << ans << endl; return 0; }