#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
struct minqueue {
  stack<pair<long long, long long> > x;
  stack<pair<long long, long long> > y;
  void push(long long val) {
    long long mn = val;
    if (!x.empty()) mn = min(mn, x.top().second);
    x.push({val, mn});
  }
  bool empty() { return (x.empty() and y.empty()); }
  void calibrate() {
    while (!x.empty()) {
      long long val = x.top().first;
      long long mn = val;
      if (!y.empty()) mn = min(mn, y.top().second);
      y.push({val, mn});
      x.pop();
    }
  }
  void pop() {
    if (y.empty()) calibrate();
    y.pop();
  }
  long long mn() {
    long long mn = 1000000000000000000;
    if (!x.empty()) mn = min(mn, x.top().second);
    if (!y.empty()) mn = min(mn, y.top().second);
    return mn;
  }
};
long long arr[3005][3005], dp[3005][3005];
long long g[9000005];
void solve() {
  long long i, j, k, l, r, m, n, a, b, c, d, x, y, z, t;
  cin >> n >> m >> a >> b;
  minqueue sh;
  cin >> g[0] >> x >> y >> z;
  for (i = 1; i <= m * n; i++) {
    g[i] = (g[i - 1] * x + y) % z;
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      arr[i][j] = g[i * m + j];
      if (j - b >= 0) {
        sh.pop();
      }
      sh.push(arr[i][j]);
      if (j + 1 >= b) {
        dp[i][j] = sh.mn();
      }
    }
    while (!sh.empty()) sh.pop();
  }
  for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
      arr[j][i] = dp[j][i];
      if (j - a >= 0) sh.pop();
      sh.push(arr[j][i]);
      if (j + 1 >= a)
        dp[j][i] = sh.mn();
      else
        dp[j][i] = 0;
    }
    while (!sh.empty()) sh.pop();
  }
  long long ans = 0;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) ans += dp[i][j];
    ;
  }
  cout << ans << endl;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long t = 1;
  while (t--) solve();
  return 0;
}
