#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

#define ABS(x) ((x)<0 ? -(x) : (x))

#define MAXN 625+1
#define MAXD 25

int gaussjordan(int **A, int M, int N) {
	int i, j, k;

	int RANK = M;
	for (i=0; i<M; i++) {
		//Busco una fila con un 1 en la columna i
		for (k=i; k<M; k++) {
			if (A[k][i] == 1) break;
		}

		//Si no la encuentro
		if (k == M) {
			RANK--;
			continue;
		}

		//Si la encuentro, pasa a ser la fila i
		for (j=0; j<N; j++) swap(A[i][j], A[k][j]);

		for (k=0; k<M; k++) {
			if (k != i && A[k][i] == 1) {
				for (j=i; j<N; j++) {
					A[k][j] = ((A[k][j] - A[i][j])%2 + 2)%2;
				}
			}
		}
	}
	return RANK;
}

int main() {

//freopen("in.txt", "r", stdin);

int i, j, k, l, N, n[MAXD][MAXD], a[MAXN][MAXN], *aa[MAXN], R, C, K;
bool flag;

for (i=0; i<MAXN; i++) aa[i] = a[i];

cin >> C;
cin >> R;
cin >> K;

do {

N = 0;
for (i=0; i<R; i++) {
	for (j=0; j<C; j++) {
		n[i][j] = N++;
	}
}

memset(a, 0, sizeof(a));
for (i=0; i<R; i++) {
	for (j=0; j<C; j++) {
		cin >> a[n[i][j]][N];
		a[n[i][j]][n[i][j]] = 1;

		for (k=0; k<R; k++) {
			for (l=0; l<C; l++) {
				if (ABS(i-k) + ABS(j-l) == K) {
					a[n[i][j]][n[k][l]] = 1;
				}
			}
		}
	}
}

/*for (i=0; i<N; i++) {
	for (j=0; j<N; j++) {
		cout << a[i][j] << ' ';
	}
	cout << endl;
}*/

gaussjordan(aa, N, N+1);

flag = true;
for (i=0; i<N && flag; i++) {
	for (j=0; j<N; j++) {
		if (a[i][j] == 1) break;
	}
	if (j==N && a[i][N]==1) flag = false;
}
if (flag) cout << 1 << endl;
else cout << 0 << endl;

cin >> C;
cin >> R;
cin >> K;

} while (R!=0 || C!=0 || K!=0);

return 0;
}