#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define bit(n, i) ((n >> i) & 1)
#define all(a) a.begin(), a.end()
#define rep(i, x, n) for (int i = x; i <= n; ++i)
#define red(i, x, n) for (int i = x; i >= n; --i)
#define inp(a) if (fopen(a".inp", "r")) freopen(a".inp", "r", stdin), freopen(a".out", "w", stdout)
template<class A, class B> inline bool maxi(A &x, B y) {return (x < y ? x = y, 1 : 0);};
template<class A, class B> inline bool mini(A &x, B y) {return (x > y ? x = y, 1 : 0);};
const int N = 2e6 + 5;
const ll MOD = 1e9 + 7;
const ll INF = LLONG_MAX;
// main program
int n, m, d;
int a[N], f[N];
int preD[N], preR[N];
int Down[N], Right[N];
int ID(int u, int v){
return u * (m + 1) + v;
}
void add(int &x, int y){
if (y < 0) y += MOD;
x += y;
if (x >= MOD) x -= MOD;
}
signed main(){
cin.tie(0) -> sync_with_stdio(0);
inp("JUMP");
cin >>n >>m >>d;
rep(i, 1, n) rep(j, 1, m){
char c; cin >>c;
a[ID(i, j)] = c - '0';
}
rep(i, 1, n) rep(j, 1, m){
Right[ID(i, j)] = Right[ID(i, j - 1)] + a[ID(i, j)];
}
rep(j, 1, m) rep(i, 1, n){
Down[ID(i, j)] = Down[ID(i - 1, j)] + a[ID(i, j)];
}
f[ID(1, 1)] = 1;
preR[ID(1, 1)] = preD[ID(1, 1)] = f[ID(1, 1)];
rep(i, 1, n) rep(j, 1, m){
if (i == 1 && j == 1) continue;
int l, r, p;
l = 1, r = j - 1, p = -1;
while (l <= r){
int mid = l + r >> 1;
if (Right[ID(i, j)] - Right[ID(i, mid - 1)] <= d){
p = mid; r = mid - 1;
} else l = mid + 1;
}
if (p != -1){
add(f[ID(i, j)], preR[ID(i, j - 1)] - preR[ID(i, p - 1)]);
}
l = 1, r = i - 1, p = -1;
while (l <= r){
int mid = l + r >> 1;
if (Down[ID(i, j)] - Down[ID(mid - 1, j)] <= d){
p = mid; r = mid - 1;
} else l = mid + 1;
}
if (p != -1){
add(f[ID(i, j)], preD[ID(i - 1, j)] - preD[ID(p - 1, j)]);
}
preR[ID(i, j)] = f[ID(i, j)];
preD[ID(i, j)] = f[ID(i, j)];
add(preR[ID(i, j)], preR[ID(i, j - 1)]);
add(preD[ID(i, j)], preD[ID(i - 1, j)]);
}
cout <<f[ID(n, m)];
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGJpdChuLCBpKSAoKG4gPj4gaSkgJiAxKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSByZXAoaSwgeCwgbikgZm9yIChpbnQgaSA9IHg7IGkgPD0gbjsgKytpKQojZGVmaW5lIHJlZChpLCB4LCBuKSBmb3IgKGludCBpID0geDsgaSA+PSBuOyAtLWkpCiNkZWZpbmUgaW5wKGEpIGlmIChmb3BlbihhIi5pbnAiLCAiciIpKSBmcmVvcGVuKGEiLmlucCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKGEiLm91dCIsICJ3Iiwgc3Rkb3V0KQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4gaW5saW5lIGJvb2wgbWF4aShBICZ4LCBCIHkpIHtyZXR1cm4gKHggPCB5ID8geCA9IHksIDEgOiAwKTt9Owp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCPiBpbmxpbmUgYm9vbCBtaW5pKEEgJngsIEIgeSkge3JldHVybiAoeCA+IHkgPyB4ID0geSwgMSA6IDApO307Cgpjb25zdCBpbnQgTiA9IDJlNiArIDU7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CmNvbnN0IGxsIElORiA9IExMT05HX01BWDsKCi8vIG1haW4gcHJvZ3JhbQoKaW50IG4sIG0sIGQ7CmludCBhW05dLCBmW05dOwppbnQgcHJlRFtOXSwgcHJlUltOXTsKaW50IERvd25bTl0sIFJpZ2h0W05dOwoKaW50IElEKGludCB1LCBpbnQgdil7CiAgICByZXR1cm4gdSAqIChtICsgMSkgKyB2Owp9Cgp2b2lkIGFkZChpbnQgJngsIGludCB5KXsKICAgIGlmICh5IDwgMCkgeSArPSBNT0Q7CiAgICB4ICs9IHk7CiAgICBpZiAoeCA+PSBNT0QpIHggLT0gTU9EOwp9CnNpZ25lZCBtYWluKCl7CiAgICBjaW4udGllKDApIC0+IHN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGlucCgiSlVNUCIpOwogICAgY2luID4+biA+Pm0gPj5kOwoKICAgIHJlcChpLCAxLCBuKSByZXAoaiwgMSwgbSl7CiAgICAgICAgY2hhciBjOyBjaW4gPj5jOwogICAgICAgIGFbSUQoaSwgaildID0gYyAtICcwJzsKICAgIH0KCiAgICByZXAoaSwgMSwgbikgcmVwKGosIDEsIG0pewogICAgICAgIFJpZ2h0W0lEKGksIGopXSA9IFJpZ2h0W0lEKGksIGogLSAxKV0gKyBhW0lEKGksIGopXTsKICAgIH0KCiAgICByZXAoaiwgMSwgbSkgcmVwKGksIDEsIG4pewogICAgICAgIERvd25bSUQoaSwgaildID0gRG93bltJRChpIC0gMSwgaildICsgYVtJRChpLCBqKV07CiAgICB9CgogICAgZltJRCgxLCAxKV0gPSAxOwogICAgcHJlUltJRCgxLCAxKV0gPSBwcmVEW0lEKDEsIDEpXSA9IGZbSUQoMSwgMSldOwoKICAgIHJlcChpLCAxLCBuKSByZXAoaiwgMSwgbSl7CiAgICAgICAgaWYgKGkgPT0gMSAmJiBqID09IDEpIGNvbnRpbnVlOwoKICAgICAgICBpbnQgbCwgciwgcDsKCiAgICAgICAgbCA9IDEsIHIgPSBqIC0gMSwgcCA9IC0xOwoKICAgICAgICB3aGlsZSAobCA8PSByKXsKICAgICAgICAgICAgaW50IG1pZCA9IGwgKyByID4+IDE7CgogICAgICAgICAgICBpZiAoUmlnaHRbSUQoaSwgaildIC0gUmlnaHRbSUQoaSwgbWlkIC0gMSldIDw9IGQpewogICAgICAgICAgICAgICAgcCA9IG1pZDsgciA9IG1pZCAtIDE7CiAgICAgICAgICAgIH0gZWxzZSBsID0gbWlkICsgMTsKICAgICAgICB9CgogICAgICAgIGlmIChwICE9IC0xKXsKICAgICAgICAgICAgYWRkKGZbSUQoaSwgaildLCBwcmVSW0lEKGksIGogLSAxKV0gLSBwcmVSW0lEKGksIHAgLSAxKV0pOwogICAgICAgIH0KCiAgICAgICAgbCA9IDEsIHIgPSBpIC0gMSwgcCA9IC0xOwoKICAgICAgICB3aGlsZSAobCA8PSByKXsKICAgICAgICAgICAgaW50IG1pZCA9IGwgKyByID4+IDE7CgogICAgICAgICAgICBpZiAoRG93bltJRChpLCBqKV0gLSBEb3duW0lEKG1pZCAtIDEsIGopXSA8PSBkKXsKICAgICAgICAgICAgICAgIHAgPSBtaWQ7IHIgPSBtaWQgLSAxOwogICAgICAgICAgICB9IGVsc2UgbCA9IG1pZCArIDE7CiAgICAgICAgfQoKICAgICAgICBpZiAocCAhPSAtMSl7CiAgICAgICAgICAgIGFkZChmW0lEKGksIGopXSwgcHJlRFtJRChpIC0gMSwgaildIC0gcHJlRFtJRChwIC0gMSwgaildKTsKICAgICAgICB9CgogICAgICAgIHByZVJbSUQoaSwgaildID0gZltJRChpLCBqKV07CiAgICAgICAgcHJlRFtJRChpLCBqKV0gPSBmW0lEKGksIGopXTsKICAgICAgICBhZGQocHJlUltJRChpLCBqKV0sIHByZVJbSUQoaSwgaiAtIDEpXSk7CiAgICAgICAgYWRkKHByZURbSUQoaSwgaildLCBwcmVEW0lEKGkgLSAxLCBqKV0pOwogICAgfQoKICAgIGNvdXQgPDxmW0lEKG4sIG0pXTsKCiAgICByZXR1cm4gMDsKfQ==