#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int MAXN = 700;

int m, n, d;
int a[MAXN][MAXN];
int f[MAXN][MAXN];
int b[MAXN], x[MAXN];

inline int dis(const int x1, const int y1, const int x2, const int y2) {
	return abs(x1 - x2) + abs(y1 - y2);
}

void gen() {
	int i, j, k;
	int x, y;
	memset(f, 0, sizeof(f));
	for (i=0; i<m; ++i) for (j=0; j<n; ++j) {
		k = i * n + j;
		f[k][k] = 1;
		for (x=0; x<m; ++x) for (y=0; y<n; ++y) {
			if (dis(i, j, x, y) != d) continue;
			f[k][x*n+y] = 1;
		}
		b[k] = a[i][j];
	}
}

void out() {
	for (int i=0; i<m*n; ++i) {
		for (int j=0; j<m*n; ++j) printf("%d ", f[i][j]);
		printf(": %d\n", b[i]);
	}
}

int gao() {
	int i, j, k;
	int n(::m*::n);
	
//	out(); puts("---");
	for (i=0; i<n; ++i) {
		for (j=i; j<n; ++j) if (f[j][i]) break;
		if (j == n) continue;
		swap(b[i], b[j]);
		for (k=0; k<n; ++k) swap(f[i][k], f[j][k]);
		for (j=i+1; j<n; ++j) if (f[j][i]) {
			for (k=i; k<n; ++k) f[j][k] ^= f[i][k];
			b[j] ^= b[i];
		}
	}
//	out(); puts("---");
	for (i=n-1; i>=0; --i) {
		for (k=0,j=i+1; j<n; ++j) k ^= (f[i][j] * b[j]);
		if (f[i][i]) b[i] ^= k;
		else if (k != b[i]) return 0;
	}
//	for (i=0; i<n; ++i) printf("%d ", b[i]); puts("");
	return 1;
}

int main() {
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
	while (scanf("%d %d %d", &n, &m, &d), m||n||d) {
		for (int i=0; i<m; ++i) for (int j=0; j<n; ++j) scanf("%d", a[i]+j);
		gen();
		printf("%d\n", gao());
	}
	return 0;
}