#include <bits/stdc++.h>
#define int long long
using namespace std;

typedef vector<int> vec;
typedef vector<vec> mat;

vec gauss_jordan(const mat& A,const vec& b){
  int n=A.size();
  mat B(n,vec(n+1));
  vector<int> can(n,1);
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)B[i][j]=A[i][j]; //n*(n+1)の配列にする。

  for(int i=0;i<n;i++)B[i][n]=b[i]; //n番目に代入

  for(int i=0;i<n;i++){
    int pivot=i;//次の基準となる添え字。
    for(int j=0;j<n;j++)if(can[j] && B[j][i])pivot=j;//0以外の1つを探す
    swap(B[i],B[pivot]);//i行目に持ってくる。
    if(B[i][i]==1)can[i] = 0;

    
    for(int j=0;j<n;j++){ //
      if(i!=j && B[j][i])//i行目-i行目はスキップ
        for(int k=i;k<=n;k++)B[j][k]=B[j][k] ^ B[i][k];//i列の値をi列目以外を0にする。
    }
  }
  
  vec x(n);
  for(int i=0;i<n;i++)x[i]=B[i][n];
  
  int many = 0;
  for(int i=0;i<n;i++){
    if(B[i][i] == 0) many = 1;
    if(B[i][i] == 0 && B[i][n] == 1) return vec();
  }
  if(many) return vec(n+1);
  return x;
}

signed main(){
  
  while(1){
    
    int w, h, d;
    cin>>w>>h>>d;
    
    if( !w && !h && !d ) break;
    
    int a[25][25];
    
    for(int i=0;i<h;i++)
      for(int j=0;j<w;j++) cin>>a[i][j];
    
    mat A( h * w, vec( h * w ) );
    
    vec B( h * w );
    
    for(int i=0;i<h;i++){
      
      for(int j=0;j<w;j++){
	
	int idx = i * w + j;
	
	B[idx] = a[i][j];
	A[idx][idx] = 1;
	
	for(int ni=0;ni<h;ni++){
	  
	  for(int nj=0;nj<w;nj++){
	    
	    if( abs( ni - i ) + abs( nj - j ) != d ) continue;
	    
	    int nidx = ni * w + nj;
	    
	    A[idx][nidx] = 1;
	    
	  }
	  
	}
	
      }
      
    }
    
    vec ans = gauss_jordan( A, B );
    
    if( (int)ans.size() > 0 ) cout<<1<<endl;
    else cout<<0<<endl;
    
  }
  
  return 0;
}

