#include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = unsigned; using u64 = unsigned long long; using namespace std; template constexpr T INF = ::numeric_limits::max() / 32 * 15 + 208; int main() { int h, w, n, m; cin >> h >> w >> n >> m; h++; w++; vector> v(h+1, vector(w+1, 0)); vector> slime(n); for (auto &&i : slime) for (auto &&j : i) scanf("%d", &j); for (int i = 0; i < m; ++i) { int x, y, b, c; scanf("%d %d %d %d", &x, &y, &b, &c); int A = max(0, x-b), B = min(h, x+b+1), C = max(0, y-b), D = min(w, y+b+1); v[A][C] += c; v[B][C] -= c; v[A][D] -= c; v[B][D] += c; } for (int i = 0; i <= h; ++i) { for (int j = 0; j <= w; ++j) { if(i) v[i][j] += v[i-1][j]; if(j) v[i][j] += v[i][j-1]; if(i && j) v[i][j] -= v[i-1][j-1]; } } for (int i = 0; i <= h; ++i) { for (int j = 0; j <= w; ++j) { if(i) v[i][j] += v[i-1][j]; if(j) v[i][j] += v[i][j-1]; if(i && j) v[i][j] -= v[i-1][j-1]; } } int ans = 0; for(auto [t, u, l, r, a] : slime){ t--; l--; ll val = v[t][l]-v[t][r]-v[u][l]+v[u][r]; if(val < a) ans++; } cout << ans << "\n"; return 0; }