func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 3e3 + 5;   const int MOD = 1e9 + 7;   int N, M, A, B;   int G[MAXN * MAXN], X, Y, Z;   int H[MAXN][MAXN];   int P[MAXN][MAXN];   int T[MAXN][MAXN];   long long ans;   deque<pair<int, int> > qu;   void reset() { qu.clear(); }   void push(int v, int p) {     while (qu.size() && qu.back().first >= v) {       qu.pop_back();     }     qu.push_back({v, p});   }   int pop(int p) {     while (qu.size() && qu.front().second < p) {       qu.pop_front();     }     assert(qu.size());     return qu.front().first;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cin >> N >> M >> A >> B;     cin >> G[0] >> X >> Y >> Z;     for (int i = 1; i < N * M; i++) {       G[i] = (1LL * G[i - 1] * X + Y) % Z;     }     for (int i = 0; i < N; i++) {       for (int j = 0; j < M; j++) {         H[i][j] = G[i * M + j];       }     }     for (int i = 0; i < N; i++) {       reset();       for (int j = 0; j < B; j++) push(H[i][j], j);       P[i][B - 1] = pop(0);       for (int j = B; j < M; j++) {         push(H[i][j], j);         P[i][j] = pop(j - B + 1);       }     }     for (int j = B - 1; j < M; j++) {       reset();       for (int i = 0; i < A; i++) push(P[i][j], i);       ans += pop(0);       for (int i = A; i < N; i++) {         push(P[i][j], i);         ans += pop(i - A + 1);       }     }     cout << ans << endl;     return 0;   }   