#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;
}