#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int h, w, n;
char org_c[35][35], c[35][35];

void copy(char src[35][35], char dest[35][35])
{
	for(int x = 1; x <= w; x++){
		for(int y = 1; y <= h; y++){
			dest[x][y] = src[x][y];
		}
	}
}

void fall()
{
	char t[35][35];
	for(int x = 1; x <= w; x++){
		for(int y = 1; y <= h; y++){
			t[x][y] = '.';
		}
	}
	for(int x = 1; x <= w; x++){
		int cnt = 0;
		for(int y = 1; y <= h; y++){
			if(c[x][y] == '.') cnt++;
			else t[x][y-cnt] = c[x][y];
		}
	}
	copy(t, c);
}

bool erase()
{
	bool used[35][35];
	for(int x = 1; x <= w; x++){
		for(int y = 1; y <= h; y++){
			used[x][y] = false;
		}
	}
	for(int x = 1; x <= w; x++){
		int cnt = 0; char pre = '#';
		for(int y = 1; y <= h+1; y++){
			if(c[x][y] != '.' && c[x][y] == pre) cnt++;
			else{
				if(cnt >= n){
					for(int i = 1; i <= cnt; i++) used[x][y-i] = true;
				}
				if(c[x][y] == '.') cnt = 0;
				else cnt = 1;
			}
			pre = c[x][y];
		}
	}
	for(int y = 1; y <= h; y++){
		int cnt = 0; char pre = '#';
		for(int x = 1; x <= w+1; x++){
			if(c[x][y] != '.' && c[x][y] == pre) cnt++;
			else{
				if(cnt >= n){
					for(int i = 1; i <= cnt; i++) used[x-i][y] = true;
				}
				if(c[x][y] == '.') cnt = 0;
				else cnt = 1;
			}
			pre = c[x][y];
		}
	}
	int cnt = 0;
	for(int x = 1; x <= w; x++){
		for(int y = 1; y <= h; y++){
			if(used[x][y]) c[x][y] = '.', cnt++;
		}
	}
	return cnt > 0;
}

bool check()
{
	bool flag = true;
	while(flag){
		fall();
		flag = erase();
	}
	int cnt = 0;
	for(int x = 1; x <= w; x++){
		for(int y = 1; y <= h; y++){
			if(c[x][y] != '.') cnt++;
		}
	}
	return cnt == 0;
}

int main(void)
{
	cin >> h >> w >> n;
	for(int y = h; y >= 1; y--){
		for(int x = 1; x <= w; x++){
			cin >> org_c[x][y];
		}
	}
	
	for(int x = 1; x < w; x++){
		for(int y = 1; y <= h; y++){
			copy(org_c, c);
			swap(c[x][y], c[x+1][y]);
			if(check()){
				cout << "YES" << endl;
				return 0;
			}
		}
	}
	cout << "NO" << endl;
	
	return 0;
}
