#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> P;

const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};

int H, W, d, n;
char field[55][55];
bool used[55][55];
bool walk[55][55];
vector<int> r;

void init(){
  memset(used, true, sizeof(used));
  memset(walk, false, sizeof(walk));
  r.clear();
}

bool isrange(int X, int Y, int x, int y, int range){
  int sx = X - range;
  int gx = X + range;
  int sy = Y - range;
  int gy = Y + range;
  
  return (sx <= x && x <= gx) && (sy <= y && y <= gy);
}

void dowsing(int x, int y, int s){
  if(s == 0){
    for(int i = 0 ; i < H ; i++){
      for(int j = 0 ; j < W ; j++){
	if(!isrange(x, y, j, i, r[0])) used[i][j] = false;
      }
    }
  }
  else if(s == d){
    for(int i = 0 ; i < H ; i++){
      for(int j = 0 ; j < W ; j++){
	if(isrange(x, y, j, i, r[d-1])) used[i][j] = false;
      }
    }
  }
  else{
    for(int i = 0 ; i < H ; i++){
      for(int j = 0 ; j < W ; j++){
	if(!(isrange(x, y, j, i, r[s]) 
	     && !isrange(x, y, j, i, r[s-1]))) used[i][j] = false;	
      }
    }
  }
}

void display(){   
  for(int i = 0 ; i < H ; i++){
    for(int j = 0 ; j < W ; j++){
      cout << used[i][j] << ' ';
    }
    cout << endl;
  }
}

void bfs(int sx, int sy){
  queue<P> que;
  que.push(P(sx, sy));
  
  while(!que.empty()){
    P q = que.front(); que.pop();
    
    int x = q.first, y = q.second;
    if(walk[y][x]) continue;
    walk[y][x] = true;
    
    for(int i = 0 ; i < 4 ; i++){
      int nx = x + dx[i], ny = y + dy[i];      
      if(0 <= nx && nx < W && 0 <= ny && ny < H)
	if(field[ny][nx] != '#') que.push(P(nx, ny));      
    }
  }
}

int main(){

  while(cin >> H >> W >> d >> n){
    init();
    
    int sx, sy;

    for(int i = 0 ; i < H ; i++){
      for(int j = 0 ; j < W ; j++){
	cin >> field[i][j];
	if(field[i][j] == 'D') sx = j, sy = i;
	if(field[i][j] == '#') used[i][j] = false;	
      }
    }
    
    bfs(sx, sy);
    
    r.resize(d);
    
    for(int i = 0 ; i < d ; i++) cin >> r[i];
    
    int x, y, s;
    while(n--){
      cin >> x >> y >> s;      
      dowsing(x, y, s);
    }
    
    bool f1, f2, f3;
    f1 = f2 = f3 = false;
    for(int i = 0 ; i < H ; i++){
      for(int j = 0 ; j < W ; j++){
	if(used[i][j]) f1 = true;
	if(used[i][j] && walk[i][j]) f2 = true;
	if(used[i][j] && !walk[i][j]) f3 = true;
      }
    }
    
    if(!f1) cout << "Broken" << endl;
    else if(f2 && f3) cout << "Unknown" << endl;
    else if(f2) cout << "Yes" << endl;
    else cout << "No" << endl;    
  }
  
  return 0;
}