#include<bits/stdc++.h> usingnamespace std; typedeflonglong ll; int mat[5005][5005]; bool vis[10005]; int dis[10005]; intmain() { int n, m; ll a, b, c, d, p; cin >> n >> m >> a >> b >> c >> d >> p; int len = n * m + 1; ll cal = a; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) cal = mat[i][j] = (cal * cal * b + cal * c + d) % p; } int cur = 1; vis[cur] = true; dis[cur] = 0; memset(dis, 0x3f, sizeof(dis)); for (int i = 1; i <= m; i++) { dis[n + i] = min(dis[n + i], mat[cur][i]); } int ans = 0; while (1) { int tmp = -1; int MIN = 0x7fffffff; for (int i = 1; i <= m + n; i++) { if (!vis[i] && dis[i] < MIN) { MIN = dis[i]; tmp = i; } } if (tmp == -1)break; ans += MIN; vis[tmp] = true; if (tmp <= n) { for (int i = 1; i <= m; i++) { dis[n + i] = min(dis[n + i], mat[tmp][i]); } } else { for (int i = 1; i <= n; i++) { dis[i] = min(dis[i], mat[i][tmp - n]); } } } cout << ans << endl; return0; } /* 2 2 5 1 5 1 4 4 2 4 0 3 3 0 3 3 0 0 3 3 3 5 0 0 2 8 1 2 3 4 7 2 5 0 0 0 0 1 1 1 1 1 0 */