#include <cstdio>
#include <cstdint>
#include <vector>
#include <algorithm>
#include <utility>
#include <string>
#include <queue>
#include <tuple>

constexpr size_t m1 = -1;
constexpr size_t di[] = {m1, 0, 1, 0};
constexpr size_t dj[] = {0, m1, 0, 1};

bool nyaibu(int i, int j, int y, int x, int r) {
  // (y-r, x-r) <= (i, j) <= (y+r, x+r)
  if (!(y-r <= i && i <= y+r)) return false;
  if (!(x-r <= j && j <= x+r)) return false;
  return true;
}

int main() {
  size_t h, w, d, n;
  scanf("%zu %zu %zu %zu", &h, &w, &d, &n);

  std::vector<std::string> t(h);
  size_t si, sj;
  for (size_t i = 0; i < h; ++i) {
    char buf[64];
    scanf("%s", buf);
    t[i] = buf;
    for (size_t j = 0; j < w; ++j) {
      if (t[i][j] == 'D') {
        si = i;
        sj = j;
      }
    }
  }

  // fprintf(stderr, "(%zu, %zu)\n", si, sj);

  std::vector<size_t> r(d);
  for (auto& ri: r) scanf("%zu", &ri);

  std::vector<std::tuple<size_t, size_t, size_t>> xys(n);
  for (auto& pi: xys) {
    size_t x, y, s;
    scanf("%zu %zu %zu", &x, &y, &s);
    pi = std::make_tuple(x, y, s);
  }

  std::vector<std::string> u = t;
  for (size_t i = 0; i < h; ++i) {
    for (size_t j = 0; j < w; ++j) {
      if (u[i][j] != '#') u[i][j] = '*';
    }
  }

  for (size_t ii = 0; ii < n; ++ii) {
    size_t x, y, s;
    std::tie(x, y, s) = xys[ii];
    if (s == 0) {
      for (size_t i = 0; i < h; ++i) {
        for (size_t j = 0; j < w; ++j) {
          if (t[i][j] == '#') continue;
          if (!nyaibu(i, j, y, x, r[0])) u[i][j] = '.';
        }
      }
    } else if (s < d) {
      for (size_t i = 0; i < h; ++i) {
        for (size_t j = 0; j < w; ++j) {
          if (u[i][j] == '#') continue;
          if (nyaibu(i, j, y, x, r[s-1])) {
            u[i][j] = '.';
          } else if (!nyaibu(i, j, y, x, r[s])) {
            u[i][j] = '.';
          }
        }
      }
    } else {
      for (size_t i = 0; i < h; ++i) {
        for (size_t j = 0; j < w; ++j) {
          if (u[i][j] == '#') continue;
          if (nyaibu(i, j, y, x, r[d-1])) u[i][j] = '.';
        }
      }
    }
  }

  // for (size_t i = 0; i < h; ++i)
  //   fprintf(stderr, "%s\n", u[i].c_str());

  using zahyo = std::pair<size_t, size_t>;
  std::queue<zahyo> q;
  q.emplace(si, sj);
  int inf = 1e9;
  std::vector<std::vector<int>> dp(h, std::vector<int>(w, inf));
  dp[si][sj] = 0;
  while (!q.empty()) {
    size_t i, j;
    std::tie(i, j) = q.front();
    q.pop();

    for (size_t k = 0; k < 4; ++k) {
      size_t ni = i + di[k];
      size_t nj = j + dj[k];
      if (!(ni < h && nj < w)) continue;
      if (u[ni][nj] == '#') continue;
      if (!(dp[ni][nj] > dp[i][j] + 1)) continue;
      dp[ni][nj] = dp[i][j] + 1;
      q.emplace(ni, nj);
    }
  }

  // for (size_t i = 0; i < h; ++i)
  //   fprintf(stderr, "%s\n", u[i].c_str());

  // for (size_t i = 0; i < h; ++i)
  //   for (size_t j = 0; j < w; ++j)
  //     fprintf(stderr, "%d%c", dp[i][j], j+1<w? ' ':'\n');

  bool dame = false;
  bool yoi = false;
  for (size_t i = 0; i < h; ++i) {
    for (size_t j = 0; j < w; ++j) {
      if (u[i][j] == '*') {
        if (dp[i][j] == inf) {
          dame = true;
        } else {
          yoi = true;
        }
      }
    }
  }

  // fprintf(stderr, "%syoi\n", yoi? "":"!");
  // fprintf(stderr, "%sdame\n", dame? "":"!");

  if (yoi) {
    if (dame) return puts("Unknown"), 0;
    puts("Yes");
  } else {
    if (dame) return puts("No"), 0;
    puts("Broken");
  }
}



Measured memory_bytes: 2828