#include<bits/stdc++.h>
using namespace std;
#define QAQ return
#define QWQ return 0;
#define ll long long
#define pii pair< int,int >
const int N=1e6+10, M=1e1+10;
int head[N], ver[N], nxt[N], CNT;
inline void add( int x,int y )
{
ver[++CNT]=y, nxt[CNT]=head[x], head[x]=CNT;
ver[++CNT]=x, nxt[CNT]=head[y], head[y]=CNT;
}
int n, m, w;
int vis[N][M];
bool rest[N][M], flag;
inline void dfs( int p,int x )
{
int nxtd=x%w+1;
for( int i=head[p];i;i=nxt[i] )
if( vis[ver[i]][nxtd] == 1 ){ flag=true; QAQ; }
else if( vis[ver[i]][nxtd] == 0 && rest[ver[i]][nxtd] )
{
vis[ver[i]][nxtd]=1;
dfs( ver[i],nxtd );
}
vis[p][x]=2;
}
inline void intt1()
{
CNT=0;
for( int i=1;i<=n;i++ ) head[i]=0;
}
inline void intt2()
{
for( int i=1;i<=n;i++ ) for( int j=1;j<=w;j++ ) vis[i][j]=0;
flag=false;
}
inline void sovel()
{
cin>>n>>m;
intt1();
for( int i=1, x, y;i<=m;i++ ) cin>>x>>y, add( x,y );
cin>>w;
intt2();
char ch;
for( int i=1;i<=n;i++ ) for( int j=1;j<=w;j++ ) cin>>ch, rest[i][j]=( ch == 'o' );
for( int i=1;i<=n;i++ ) add( i,i );
for( int i=1;i<=n;i++ )
{
if( vis[i][1] == 2 || !rest[i][1] ) continue;
vis[i][1]=1;
dfs( i,1 );
}
cout<<( flag ? "Yes" : "No" )<<"\n";
}
int main()
{
ios::sync_with_stdio( false );
cin.tie( nullptr ), cout.tie( nullptr );
int t;
for( cin>>t;t;t-- ) sovel();
QWQ
}