#include <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;
 
#define REP(i,n) for(int i=0; i<n; ++i)
#define FOR(i,a,b) for(int i=a; i<=b; ++i)
#define FORR(i,a,b) for (int i=a; i>=b; --i)
#define pi M_PI
 
typedef long long ll;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef vector<VI> VVI;
typedef pair<int,int> P;
typedef pair<ll,ll> PL;

int w, h, n;

void drop(VVI &a){
    REP(i,w){
        int end = 0;
        REP(j,h){
            if (a[i][j] > 0){
                a[i][end++] = a[i][j];
            }
        }
        while (end < h) a[i][end++] = 0;
    }
}

bool check(VVI a){
    bool zenkesi = 1;
    REP(i,w) REP(j,h) zenkesi &= (a[i][j] == 0);
    if (zenkesi) return 1;

    drop(a);

    VVI e(w, VI(h));
    REP(i,w) REP(j,h-n+1){
        if (a[i][j] == 0) continue;
        bool f = 1;
        REP(k,n){
            if (a[i][j] != a[i][j+k]) f = 0;
        }
        if (f){
            REP(k,n) e[i][j+k] = 1;
        }
    }
    REP(i,w-n+1) REP(j,h){
        if (a[i][j] == 0) continue;
        bool f = 1;
        REP(k,n){
            if (a[i][j] != a[i+k][j]) f = 0;
        }
        if (f){
            REP(k,n) e[i+k][j] = 1;
        }
    }

    bool no_move = 1;
    REP(i,w) REP(j,h){
        if (e[i][j]){
            no_move = 0;
            a[i][j] = 0;
        }
    }

    if (no_move) return 0;
    else return check(a);
}

int main() {
    cin >> h >> w >> n;
    VVI a(w, VI(h));
    REP(i,h){
        string s;
        cin >> s;
        REP(j,w){
            if (s[j] != '.') a[j][h-1-i] = s[j] - 'A' + 1;
        }
    }

    REP(i,w-1) REP(j,h){
        swap(a[i][j], a[i+1][j]);
        if (check(a)){
            cout << "YES" << endl;
            return 0;
        }
        swap(a[i][j], a[i+1][j]);
    }

    cout << "NO" << endl;

    return 0;
}