#include<bits/stdc++.h>
using namespace std;
const int SIZE=25*25;

int di[]={1,1,-1,-1};
int dj[]={1,-1,-1,1};
int inii[]={-1,0,1,0};
int inij[]={0,1,0,-1};
int solve(int m,int n,int d){
    vector<bitset<SIZE>> bits(m*n);
    vector<vector<int>> s(n,vector<int>(m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>s[i][j];
        }
    }
    auto getV=[&](int i,int j){
        return i*m+j;
    };
    auto isRange=[&](int i,int j){
        return 0<=i && i<n && 0<=j && j<m;
    };
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            bits[getV(i,j)][getV(i,j)]=true;
            for(int dir=0;dir<4;dir++){
                for(int k=0;k<d;k++){
                    int toi=i+inii[dir]*d+di[dir]*k;
                    int toj=j+inij[dir]*d+dj[dir]*k;
                    if(isRange(toi,toj)){
                        bits[getV(i,j)][getV(toi,toj)]=true;
                    }
                }
            }
        }
    }
    vector<int> flag(m*n);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            flag[getV(i,j)]=s[i][j];
        }
    }
    int sz=n*m;
    int row=0;
    int col=0;
    while(row<sz && col<sz){
        int pivot=-1;
        for(int j=row;j<sz;j++){
            if(bits[j][col]){
                pivot=j;
                break;
            }
        }
        if(pivot==-1){
            col++;
            continue;
        }
        else{
            swap(bits[row],bits[pivot]);
            swap(flag[row],flag[pivot]);
            for(int i=0;i<sz;i++){
                if(i!=row && bits[i][col]){
                    bits[i]^=bits[row];
                    flag[i]^=flag[row];
                }
            }
            row++,col++;
        }
    }
    for(int i=0;i<sz;i++){
        if(bits[i]==0 && flag[i]){
            return false;
        }
    }
    return true;
}
int main(){
    int m,n,d;
    while(cin>>m>>n>>d,m){
        cout<<solve(m,n,d)<<endl;        
    }
    return 0;
}
