// In the name of God. // You are anything and We're nothing // Ya Ali! #include using namespace std; typedef long long ll; const int maxn = 1e2, mod = 1e9 + 7, mmat = 1e2, maxl = 24; int n, m, ra, rb, k, t; struct Mat{ int ****a; // a[n][m][n][m] Mat(bool emp = 0){ a = new int***[n]; for(int i = 0; i < n; i++){ a[i] = new int**[m]; for(int j = 0; j < m; j++){ a[i][j] = new int *[n]; for(int k = 0; k < n; k++){ a[i][j][k] = new int[m]; fill(a[i][j][k], a[i][j][k] + m, 0); } a[i][j][i][j] = emp; } } } int*** operator [](int i) const{ return a[i]; } Mat operator *(const Mat &b){ Mat ret; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) for(int i2 = 0; i2 < n; i2++) for(int j2 = 0; j2 < m; j2++) for(int i3 = 0; i3 < n; i3++) for(int j3 = 0; j3 < m; j3++) ret[i][j][i3][j3] = (ret[i][j][i3][j3] + (ll) a[i][j][i2][j2] * b[i2][j2][i3][j3]) % mod; return ret; } }; Mat operator ^(Mat a, int b){ Mat ret(1); for(; b; b >>= 1, a = a * a) if(b & 1) ret = ret * a; return ret; } bool ban[maxl][maxn][maxn]; int rev(int a){ int ans = 1; for(int b = mod - 2; b; b >>= 1, a = (ll) a * a % mod) if(b & 1) ans = (ll) ans * a % mod; return ans; } Mat solve(int r){ auto at = [r](int t){ Mat ret; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++){ int cnt = 0; for(int i2 = 0; i2 < n; i2++) for(int j2 = 0; j2 < m; j2++) if(abs(i - i2) + abs(j - j2) <= r && !ban[t][i2][j2]) cnt++; cnt = rev(cnt); for(int i2 = 0; i2 < n; i2++) for(int j2 = 0; j2 < m; j2++) if(abs(i - i2) + abs(j - j2) <= r && !ban[t][i2][j2]) ret[i][j][i2][j2] = cnt; } return ret; }; Mat a(1); for(int i = 1; i <= maxl; i++) a = a * at(i % maxl); a = a ^ (t / maxl); for(int i = 1; i <= t % maxl; i++) a = a * at(i % maxl); return a; } int main(){ ios::sync_with_stdio(0), cin.tie(0); cin >> n >> m >> ra >> rb >> k >> t; for(int i = 0; i < k; i++){ int sx, sy, ex, ey, x, y, dx = 0, dy = 0; cin >> sx >> sy >> ex >> ey; x = sx, y = sy; if(sx == ex) dy = 2 * (sy > ey) - 1; else dx = 2 * (sx > ex) - 1; for(int t = 0; t < maxl; t++){ ban[t][x][y] = 1; //cerr << t << ' ' << x << ' ' << y << '\n'; if(x == ex && y == ey || x == sx && y == sy) dy = -dy, dx = -dx; x += dx, y += dy; } assert(x == sx && y == sy); } int ans = 0; Mat a = solve(ra), b = solve(rb); /* for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) cerr << b[n - 1][m - 1][i][j] << " \n"[j == m - 1]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) cerr << a[0][0][i][j] << " \n"[j == m - 1]; */ for(int i = 0; i < n; i++) for(int j = 0; j < m; j++){ ans = (ans + (ll) a[0][0][i][j] * b[n - 1][m - 1][i][j]) % mod; } cout << ans << '\n'; }