func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, p, q, c, x, y, mod, lo[100000], z[3005][3005];   long long ans;   struct segment_tree {     int a[3005][13];     void update(int x, int y) { a[x][0] = y; }     void build(int n) {       for (int i = 1; i <= lo[n]; i++)         for (int j = 1; j + (1 << i) - 1 <= n; j++)           a[j][i] = min(a[j][i - 1], a[j + (1 << (i - 1))][i - 1]);     }     long long find(int x, int y) {       int len = lo[y - x + 1];       return min(a[x][len], a[y - (1 << len) + 1][len]);     }   } a;   int main() {     scanf( %d%d%d%d , &n, &m, &p, &q);     scanf( %d%d%d%d , &c, &x, &y, &mod);     a.update(1, c);     for (int i = 2; i <= 10000; i++) lo[i] = lo[i >> 1] + 1;     for (int i = 2; i <= m; i++) c = (1ll * c * x + y) % mod, a.update(i, c);     a.build(m);     for (int i = 1; i <= m - q + 1; i++) z[1][i] = a.find(i, i + q - 1);     for (int i = 2; i <= n; i++) {       for (int j = 1; j <= m; j++) c = (1ll * c * x + y) % mod, a.update(j, c);       a.build(m);       for (int j = 1; j <= m - q + 1; j++) z[i][j] = a.find(j, j + q - 1);     }     for (int i = 1; i <= m - q + 1; i++) {       for (int j = 1; j <= n; j++) a.update(j, z[j][i]);       a.build(n);       for (int j = 1; j <= n - p + 1; j++) ans = ans + a.find(j, j + p - 1);     }     printf( %lld , ans);   }   