#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;
}
