#include <bits/stdc++.h>
using namespace std;
long long int ARR[9000000];
long long int table[3000][3000];
long long int table2[3000][3000];
deque<long long int> q;
void add(long long int x) {
  while (!q.empty() && q.back() > x) q.pop_back();
  q.push_back(x);
}
long long int query() { return q.front(); }
void remove(long long int x) {
  while (!q.empty() && q.front() == x) q.pop_front();
}
void clr() {
  while (!q.empty()) q.pop_front();
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long int n, m;
  scanf("%lld %lld", &n, &m);
  long long int a, b;
  scanf("%lld %lld", &a, &b);
  long long int x, y, z;
  scanf("%lld %lld %lld %lld", &ARR[0], &x, &y, &z);
  for (int i = 0; i < n * m - 1; i++) {
    ARR[i + 1] = (ARR[i] * x + y) % z;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      table[i][j] = ARR[i * m + j];
    }
  }
  for (int j = 0; j < m; j++) {
    for (int i = 0; i < n; i++) {
      add(table[i][j]);
      if (i >= a - 1) {
        table2[i - a + 1][j] = query();
        remove(table[i - a + 1][j]);
      }
    }
    clr();
  }
  for (int i = 0; i < n - a + 1; i++) {
    for (int j = 0; j < m; j++) {
      add(table2[i][j]);
      if (j >= b - 1) {
        table[i][j - b + 1] = query();
        remove(table2[i][j - b + 1]);
      }
    }
    clr();
  }
  long long int ans = 0;
  for (int i = 0; i < n - a + 1; i++) {
    for (int j = 0; j < m - b + 1; j++) {
      ans += table[i][j];
    }
  }
  printf("%lld\n", ans);
  return 0;
}
