#include <bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9') {
if(ch == '-') {
f = -1;
}
ch = getchar();
}
while(ch >= '0' && ch <= '9') {
x = x * 10 + ch - 48;
ch = getchar();
}
return x * f;
}
inline void print(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9) {
print(x / 10);
}
putchar(x % 10 + 48);
}
constexpr int N = 1e6 + 10;
int T;
int n, m;
int f[N];
int a;
int sum;
string s[N];
inline void init() {
for(int i = 1; i <= n * m; i++) {
f[i] = i;
}
return ;
}
inline int find(int x) {
if(f[x] == x) {
return x;
}
return f[x] = find(f[x]);
}
inline void merge(int x, int y) {
int fx = find(x), fy = find(y);
if(fx != fy) {
f[fy] = fx;
}
return ;
}
int main() {
ios :: sync_with_stdio(false);
cin.tie(0), cout.tie(0);
T = read();
while(T--) {
n = read(), m = read();
for(int i = 1; i <= n; i++) {
cin >> s[i];
s[i] = ' ' + s[i];
}
init();
sum = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
a = read();
if(s[i][j] == 'u') {
if(i - a > 0) {
merge((i - 1) * m + j, (i - 1 - a) * m + j);
}
}
else if(s[i][j] == 'd') {
if(i + a <= n) {
merge((i - 1) * m + j, (i + a - 1) * m + j);
}
}
else if(s[i][j] == 'l') {
if(j - a > 0) {
merge((i - 1) * m + j, (i - 1) * m + j - a);
}
}
else if(s[i][j] == 'r') {
if(j + a <= m) {
merge((i - 1) * m + j, (i - 1) * m + j + a);
}
}
}
}
for(int i = 1; i <= n * m; i++) {
if(f[i] == i) {
sum++;
}
}
if(sum == 1) {
cout << "Yes\n";
}
else {
cout << "No\n";
}
}
return 0;
}