#include <bits/stdc++.h>
#define el '\n'
#define fi first
#define sec second
#define pb push_back
#define int long long
#define pii pair<int,int>
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; i++)
#define REP(i, a, b) for(int i = (a), _b = (b); i >= _b; i--)
using namespace std;
const int INF = (int)1e18 + 462010;
const int MAX_N = 1e5;
int n, m, K;
vector<vector<int>> a, P;
vector<int> cnt, st;
int ver = 0;
void ins(int x){
if(st[x] != ver){
st[x] = ver;
cnt[x] = 0;
}
cnt[x]++;
}
int get(int x){
return st[x] == ver ? cnt[x] : 0;
}
void Input(){
cin >> n >> m >> K;
a.assign(n + 1, vector<int>(m + 1, 0));
FOR(i, 1, n) FOR(j, 1, m) cin >> a[i][j];
}
void Prepare(){
if(n > m){
vector<vector<int>> b(m + 1, vector<int>(n + 1, 0));
FOR(i, 1, n) FOR(j, 1, m) b[j][i] = a[i][j];
swap(a, b);
swap(n, m);
}
P.assign(n + 1, vector<int>(m + 1, 0));
FOR(i, 1, n) FOR(j, 1, m){
int val = a[i][j] == -1 ? 0 : a[i][j] % K;
int cur = P[i - 1][j] + P[i][j - 1] - P[i - 1][j - 1] + val;
cur %= K;
if(cur < 0) cur += K;
P[i][j] = cur;
}
cnt.assign(K + 5, 0);
st.assign(K + 5, 0);
}
void Solve(){
int ans = 0;
FOR(u, 1, n){
vector<char> badc(m + 1, 0);
FOR(v, u, n){
FOR(j, 1, m) if(a[v][j] == -1) badc[j] = 1;
ver++;
ins(0);
FOR(j, 1, m){
int s = P[v][j] - P[u - 1][j];
if(s < 0) s += K;
if(badc[j]){
ver++;
ins(s);
}
else{
ans += get(s);
ins(s);
}
}
}
}
cout << ans << el;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
Input();
Prepare();
Solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGVsICdcbicKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlYyBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBzeih2KSAoaW50KSh2KS5zaXplKCkKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksKHYpLmVuZCgpCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7IGkrKykKI2RlZmluZSBSRVAoaSwgYSwgYikgZm9yKGludCBpID0gKGEpLCBfYiA9IChiKTsgaSA+PSBfYjsgaS0tKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBJTkYgPSAoaW50KTFlMTggKyA0NjIwMTA7CmNvbnN0IGludCBNQVhfTiA9IDFlNTsKCmludCBuLCBtLCBLOwp2ZWN0b3I8dmVjdG9yPGludD4+IGEsIFA7CnZlY3RvcjxpbnQ+IGNudCwgc3Q7CmludCB2ZXIgPSAwOwoKdm9pZCBpbnMoaW50IHgpewogICAgaWYoc3RbeF0gIT0gdmVyKXsKICAgICAgICBzdFt4XSA9IHZlcjsKICAgICAgICBjbnRbeF0gPSAwOwogICAgfQogICAgY250W3hdKys7Cn0KCmludCBnZXQoaW50IHgpewogICAgcmV0dXJuIHN0W3hdID09IHZlciA/IGNudFt4XSA6IDA7Cn0KCnZvaWQgSW5wdXQoKXsKICAgIGNpbiA+PiBuID4+IG0gPj4gSzsKICAgIGEuYXNzaWduKG4gKyAxLCB2ZWN0b3I8aW50PihtICsgMSwgMCkpOwogICAgRk9SKGksIDEsIG4pIEZPUihqLCAxLCBtKSBjaW4gPj4gYVtpXVtqXTsKfQoKdm9pZCBQcmVwYXJlKCl7CiAgICBpZihuID4gbSl7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBiKG0gKyAxLCB2ZWN0b3I8aW50PihuICsgMSwgMCkpOwogICAgICAgIEZPUihpLCAxLCBuKSBGT1IoaiwgMSwgbSkgYltqXVtpXSA9IGFbaV1bal07CiAgICAgICAgc3dhcChhLCBiKTsKICAgICAgICBzd2FwKG4sIG0pOwogICAgfQoKICAgIFAuYXNzaWduKG4gKyAxLCB2ZWN0b3I8aW50PihtICsgMSwgMCkpOwogICAgRk9SKGksIDEsIG4pIEZPUihqLCAxLCBtKXsKICAgICAgICBpbnQgdmFsID0gYVtpXVtqXSA9PSAtMSA/IDAgOiBhW2ldW2pdICUgSzsKICAgICAgICBpbnQgY3VyID0gUFtpIC0gMV1bal0gKyBQW2ldW2ogLSAxXSAtIFBbaSAtIDFdW2ogLSAxXSArIHZhbDsKICAgICAgICBjdXIgJT0gSzsKICAgICAgICBpZihjdXIgPCAwKSBjdXIgKz0gSzsKICAgICAgICBQW2ldW2pdID0gY3VyOwogICAgfQoKICAgIGNudC5hc3NpZ24oSyArIDUsIDApOwogICAgc3QuYXNzaWduKEsgKyA1LCAwKTsKfQoKdm9pZCBTb2x2ZSgpewogICAgaW50IGFucyA9IDA7CgogICAgRk9SKHUsIDEsIG4pewogICAgICAgIHZlY3RvcjxjaGFyPiBiYWRjKG0gKyAxLCAwKTsKCiAgICAgICAgRk9SKHYsIHUsIG4pewogICAgICAgICAgICBGT1IoaiwgMSwgbSkgaWYoYVt2XVtqXSA9PSAtMSkgYmFkY1tqXSA9IDE7CgogICAgICAgICAgICB2ZXIrKzsKICAgICAgICAgICAgaW5zKDApOwoKICAgICAgICAgICAgRk9SKGosIDEsIG0pewogICAgICAgICAgICAgICAgaW50IHMgPSBQW3ZdW2pdIC0gUFt1IC0gMV1bal07CiAgICAgICAgICAgICAgICBpZihzIDwgMCkgcyArPSBLOwoKICAgICAgICAgICAgICAgIGlmKGJhZGNbal0pewogICAgICAgICAgICAgICAgICAgIHZlcisrOwogICAgICAgICAgICAgICAgICAgIGlucyhzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgYW5zICs9IGdldChzKTsKICAgICAgICAgICAgICAgICAgICBpbnMocyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgZWw7Cn0KCnNpZ25lZCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBJbnB1dCgpOwogICAgUHJlcGFyZSgpOwogICAgU29sdmUoKTsKCiAgICByZXR1cm4gMDsKfQ==