#include using namespace std; using ll = long long; int main(){ ios::sync_with_stdio(false); cin.tie(0); int h, w; cin >> h >> w; vector A(h), B(w, string(h, '?')); vector> ans; for(int y = 0; y < h; y++){ auto &&ss = A[y]; cin >> ss; for(int i = 0; i < w; ){ int p = i; while(i < w && ss[i] == ss[p]) i++; if(ss[p] == '#') continue; if(i - p >= 2) ans.emplace_back(y, p); } } for(int y = 0; y < h; y++){ for(int x = 0; x < w; x++){ B[x][y] = A[y][x]; } } for(int x = 0; x < w; x++){ auto &&ss = B[x]; for(int i = 0; i < h; ){ int p = i; while(i < h && ss[i] == ss[p]) i++; if(ss[p] == '#') continue; if(i - p >= 2) ans.emplace_back(p, x); } } sort(ans.begin(), ans.end()); ans.erase(unique(ans.begin(), ans.end()), ans.end()); int k; cin >> k; //cerr << k << " " << ans.size() << '\n'; if(ans.size() != k){ cout << "No\n"; return 0; } auto add_w = [&](int y, int x, string s){ if(s == "-") return (x + 1 < w && A[y][x + 1] != '#' ? false : true); int sz = s.size(); for(int dx = 0; dx < sz; dx++){ if(x + dx >= w) return false; if(A[y][x + dx] == '#') return false; if(A[y][x + dx] == '.'){ A[y][x + dx] = s[dx]; }else{ if(A[y][x + dx] != s[dx]) return false; } } if(x + sz < w && A[y][x + sz] != '#') return false; return true; }; auto add_h = [&](int y, int x, string s){ if(s == "-") return (y + 1 < h && A[y + 1][x] != '#' ? false : true); int sz = s.size(); for(int dy = 0; dy < sz; dy++){ if(y + dy >= h) return false; if(A[y + dy][x] == '#') return false; if(A[y + dy][x] == '.'){ A[y + dy][x] = s[dy]; }else{ if(A[y + dy][x] != s[dy]) return false; } } if(y + sz < h && A[y + sz][x] != '#') return false; return true; }; for(auto [y, x] : ans){ string s, t; cin >> s >> t; // cerr << s << " " << t << '\n'; if(!add_w(y, x, s) || !add_h(y, x, t)){ cout << "No\n"; return 0; } } cout << "Yes\n"; }