#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <functional>
#include <queue>
#include <stack>
#include <cmath>
#include <iomanip>
#include <list>
#include <tuple>
#include <bitset>
#include <ciso646>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> P;
typedef tuple<int, int, int> T;

inline bool cheak(ll x, ll y, ll xMax, ll yMax){ return x >= 0 && y >= 0 && xMax > x && yMax > y; }
inline ll toInt(string s) { ll v; istringstream sin(s); sin >> v; return v; }
template<class T> inline string toString(T x) { ostringstream sout; sout << x; return sout.str(); }
template<class T> inline T sqr(T x) { return x*x; }

#define For(i,a,b)	for(ll (i) = (a);i < (b);(i)++)
#define rep(i,n)	For(i,0,n)
#define rFor(i,a,b)	for(ll (i) = (a-1);i >= (b);(i)--)
#define rrep(i,n)	rFor(i,n,0)
#define clr(a)		memset((a), 0 ,sizeof(a))
#define mclr(a)		memset((a), -1 ,sizeof(a))
#define all(a)		(a).begin(),(a).end()
#define sz(a)		(sizeof(a))

const int dx[8] = { 1, 0, -1, 0, 1, 1, -1, -1 }, dy[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
const ll mod = 1e9 + 7;
const ll INF = 1e9 + 2;


int h, w, n;
void fall(vector<string> &s){

	rep(y, h - 1)rep(x, w){
		if (s[y][x] != '.' && s[y + 1][x] == '.'){
			swap(s[y][x], s[y + 1][x]);
			for (int ty = y - 1; ty >= 0; ty--){
				if (s[ty][x] != '.'){
					swap(s[ty][x], s[ty + 1][x]);
				}
				else{
					break;
				}
			}
		}
	}
}
bool ok(vector<string> s){
	fall(s);
	bool f[31][31];
	clr(f);
	rep(y, h){
		int cnt = 1;
		rep(x, w){
			if (x < w-1 && s[y][x] != '.' && s[y][x] == s[y][x + 1]){
				cnt++;
			}
			else{
				if (cnt >= n){
					for (int tx = x; tx > x - cnt; tx--){
						f[y][tx] = true;
					}
				}
				cnt = 1;
			}
		}
	}
	rep(x, w){
		int cnt = 1;
		rep(y, h){
			if (y < h-1 && s[y][x] != '.' && s[y][x] == s[y + 1][x]){
				cnt++;
			}
			else{
				if (cnt >= n){
					for (int ty = y; ty > y - cnt; ty--){
						f[ty][x] = true;
					}
				}
				cnt = 1;
			}
		}
	}
	bool ef = true;
	rep(y, h)rep(x, w){
		if (f[y][x]){
			s[y][x] = '.';
			ef = false;
		}
	}
	if (ef == false){
		return ok(s);
	}
	rep(y, h)rep(x, w){
		if (s[y][x] != '.')return false;
	}
	return true;
}

int main(){
	cin >> h >> w >> n;
	vector<string> s(h);
	rep(y, h){
		cin >> s[y];
	}
	if (ok(s)){
		cout << "YES" << endl;
		return 0;
	}
	rep(y, h)rep(x, w-1){
		if (s[y][x] != s[y][x+1]){
			swap(s[y][x], s[y][x+1]);
			if (ok(s)){
				cout << "YES" << endl;
				return 0;
			}
			swap(s[y][x], s[y][x+1]);
		}
	}
	cout << "NO" << endl;

	return 0;
}