#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
const int maxn = 5e2;
int n, m, q, r = 0, d = 0;
ll a[2 * maxn + 10][2 * maxn + 10], pre[2 * maxn + 10][2 * maxn + 10];
ll getsum(ll xa, ll ya, ll xb, ll yb)
{
return pre[xb][yb] - pre[xb][ya - 1] - pre[xa - 1][yb] + pre[xa - 1][ya - 1];
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("SOLPIN.INP", "r"))
{
freopen("SOLPIN.INP", "r", stdin);
freopen("SOLPIN.OUT", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++)
for (int j = m + 1; j <= 2 * m; j++)
a[i][j] = a[i][j - m];
for (int i = n + 1; i <= 2 * n; i++)
for (int j = 1; j <= 2 * m; j++)
a[i][j] = a[i - n][j];
for (int i = 1; i <= 2 * n; i++)
{
for (int j = 1; j <= 2 * m; j++)
pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + a[i][j];
}
cin >> q;
while (q--)
{
int p;
cin >> p;
if (p == 0)
{
int x, y;
cin >> x >> y;
(r += x) %= m;
(d += y) %= n;
}
else
{
int xa, ya, xb, yb;
cin >> xa >> ya >> xb >> yb;
xa += d;
xb += d;
ya += r;
yb += r;
cout << getsum(xa, ya, xb, yb), el;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuID0gNWUyOwoKaW50IG4sIG0sIHEsIHIgPSAwLCBkID0gMDsKbGwgYVsyICogbWF4biArIDEwXVsyICogbWF4biArIDEwXSwgcHJlWzIgKiBtYXhuICsgMTBdWzIgKiBtYXhuICsgMTBdOwoKbGwgZ2V0c3VtKGxsIHhhLCBsbCB5YSwgbGwgeGIsIGxsIHliKQp7CiAgICByZXR1cm4gcHJlW3hiXVt5Yl0gLSBwcmVbeGJdW3lhIC0gMV0gLSBwcmVbeGEgLSAxXVt5Yl0gKyBwcmVbeGEgLSAxXVt5YSAtIDFdOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJTT0xQSU4uSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJTT0xQSU4uSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiU09MUElOLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykKICAgICAgICAgICAgY2luID4+IGFbaV1bal07CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IG0gKyAxOyBqIDw9IDIgKiBtOyBqKyspCiAgICAgICAgICAgIGFbaV1bal0gPSBhW2ldW2ogLSBtXTsKICAgIGZvciAoaW50IGkgPSBuICsgMTsgaSA8PSAyICogbjsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IDIgKiBtOyBqKyspCiAgICAgICAgICAgIGFbaV1bal0gPSBhW2kgLSBuXVtqXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDIgKiBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gMiAqIG07IGorKykKICAgICAgICAgICAgcHJlW2ldW2pdID0gcHJlW2kgLSAxXVtqXSArIHByZVtpXVtqIC0gMV0gLSBwcmVbaSAtIDFdW2ogLSAxXSArIGFbaV1bal07CiAgICB9CiAgICBjaW4gPj4gcTsKCiAgICB3aGlsZSAocS0tKQogICAgewogICAgICAgIGludCBwOwogICAgICAgIGNpbiA+PiBwOwogICAgICAgIGlmIChwID09IDApCiAgICAgICAgewogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgKHIgKz0geCkgJT0gbTsKICAgICAgICAgICAgKGQgKz0geSkgJT0gbjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaW50IHhhLCB5YSwgeGIsIHliOwogICAgICAgICAgICBjaW4gPj4geGEgPj4geWEgPj4geGIgPj4geWI7CiAgICAgICAgICAgIHhhICs9IGQ7CiAgICAgICAgICAgIHhiICs9IGQ7CiAgICAgICAgICAgIHlhICs9IHI7CiAgICAgICAgICAgIHliICs9IHI7CiAgICAgICAgICAgIGNvdXQgPDwgZ2V0c3VtKHhhLCB5YSwgeGIsIHliKSwgZWw7CiAgICAgICAgfQogICAgfQp9Cg==