#include <bits/stdc++.h>

using namespace std;

#define REP(i, n) for (int i=0; i<(n); ++i)
#define RREP(i, n) for (int i=(int)(n)-1; i>=0; --i)
#define FOR(i, a, n) for (int i=(a); i<(n); ++i)
#define RFOR(i, a, n) for (int i=(int)(n)-1; i>=(a); --i)

#define SZ(x) ((int)(x).size())
#define all(x) begin(x),end(x)

#define dump(x) cerr<<#x<<" = "<<(x)<<endl
#define debug(x) cerr<<#x<<" = "<<(x)<<" (L"<<__LINE__<<")"<<endl;

template<class T>
ostream &operator<<(ostream &os, const vector <T> &v) {
    os << "[";
    REP(i, SZ(v)) {
        if (i) os << ", ";
        os << v[i];
    }
    return os << "]";
}

template<class T, class U>
ostream &operator<<(ostream &os, const pair <T, U> &p) {
    return os << "(" << p.first << " " << p.second << ")";
}

template<class T>
bool chmax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

template<class T>
bool chmin(T &a, const T &b) {
    if (b < a) {
        a = b;
        return true;
    }
    return false;
}

using ll = long long;
using ull = unsigned long long;
using ld = long double;
using P = pair<int, int>;
using vi = vector<int>;
using vll = vector<ll>;
using vvi = vector<vi>;
using vvll = vector<vll>;

const ll MOD = 1e9 + 7;
const int INF = INT_MAX / 2;
const ll LINF = LLONG_MAX / 2;
const ld EPS = 1e-9;


template<class T>
int GaussJordanElimination(vector<vector<T>>& mat) {
    int H = SZ(mat), W = SZ(mat[0]), rank = 0;
    for (int col = 0; col < W; ++col) {
        int pivot = -1;
        for (int row = rank; row < H; ++row) {
            if (mat[row][col] != 0) {
                pivot = row;
                break;
            }
        }
        if (pivot == -1) continue;
        swap(mat[rank], mat[pivot]);
        T topLeft = mat[rank][col];
        for (int c = col; c < W; ++c) {
            // mat[rank][c] /= topLeft;
        }
        for (int row = rank+1; row < H; ++row) {
            T ratio = mat[row][col];
            for (int c = col; c < W; ++c)
                // mat[row][c] -= ratio * mat[rank][c];
                mat[row][c] ^= ratio * mat[rank][c];
        }
        ++rank;
    }
    return (rank);
}


int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(10);

    for (;;) {
        int m, n, d;
        cin >> m >> n >> d;
        if (m == 0) break;

        vvi mat(n*m, vi(n*m+1));

        REP(i, n) REP(j, m) cin >> mat[i*m + j][n*m];
        // debug(b);

        REP(i, n) REP(j, m) {
                mat[i*m + j][i*m + j] = 1;
                REP(y, n) REP(x, m) {
                        if (abs(y - i) + abs(x - j) == d) {
                            mat[i*m + j][y*m + x] = 1;
                        }
                    }
            }

        // debug(Q);
        GaussJordanElimination(mat);
        // debug(Q);

        int ans = true;
        REP(i, n * m) {
            int allZero = true;
            REP(j, n * m) {
                if (mat[i][j] != 0) {
                    allZero = false;
                    break;
                }
            }
            if (allZero and mat[i][n * m] == 1) {
                ans = false;
                break;
            }
        }
        cout << ans << endl;
    }

    return 0;
}



Measured memory_bytes: 4492