#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <algorithm>using namespace std;#define maxn 110typedef vector<pair<int,int> > PIECE; typedef vector<PIECE> GRAPH; const int dx[]={0,0,1,-1};const int dy[]={1,-1,0,0};int w, h;int a[maxn][maxn], b[maxn][maxn];void init(){ int n, x, y; scanf("%d%d%d", &w, &h, &n); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); for (int i=0; i<n; i++) { scanf("%d%d", &x, &y); a[x][y]=1; } for (int i=0; i<n; i++) { scanf("%d%d", &x, &y); b[x][y]=1; }}void dfs(int x, int y, int aa[][maxn], int &xmin, int &xmax, int &ymin, int &ymax, PIECE &p){ if (x<0 || y<0 || x>=w || y>=h) return; if (aa[x][y]==1){ aa[x][y]=0; p.push_back(make_pair(x, y)); xmin = min(xmin, x); xmax = max(xmax, x); ymin = min(ymin, y); ymax = max(ymax, y); for (int i=0; i<4; i++) dfs(x+dx[i], y+dy[i], aa, xmin, xmax, ymin, ymax, p); }}PIECE mirror(const PIECE p, int xmin, int xmax, int ymin, int ymax){ PIECE ret; for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++) ret.push_back(make_pair(j->first, ymax-(j->second-ymin))); return ret;}PIECE rot0(const PIECE p, int xmin, int xmax, int ymin, int ymax) { PIECE ret; for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++) ret.push_back(make_pair( j->first-xmin, j->second-ymin )); sort(ret.begin(), ret.end()); return ret;}PIECE rot90(const PIECE p, int xmin, int xmax, int ymin, int ymax) { PIECE ret; for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++) ret.push_back(make_pair( ymax-j->second , j->first-xmin)); sort(ret.begin(), ret.end()); return ret;}PIECE rot180(const PIECE p, int xmin, int xmax, int ymin, int ymax) { PIECE ret; for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++) ret.push_back(make_pair( xmax-j->first, ymax-j->second)); sort(ret.begin(), ret.end()); return ret;}PIECE rot270(const PIECE p, int xmin, int xmax, int ymin, int ymax) { PIECE ret; for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++) ret.push_back(make_pair(j->second-ymin, xmax-j->first)); sort(ret.begin(), ret.end()); return ret;}bool process(){ GRAPH g1, g2; PIECE p0, p1, p; int id1=0, id2=0; int xmin, xmax, ymin, ymax; g1.clear(); for (int x=0; x<w; x++) for (int y=0; y<h; y++) { if (a[x][y]) { p0.clear(); xmin=ymin=maxn; xmax=ymax=-1; dfs(x, y, a, xmin, xmax, ymin, ymax, p0); p1=mirror(p0, xmin, xmax, ymin, ymax); p=rot0(p0, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot90(p0, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot180(p0, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot270(p0, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot0(p1, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot90(p1, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot180(p1, xmin, xmax, ymin, ymax); g1.push_back(p); p=rot270(p1, xmin, xmax, ymin, ymax); g1.push_back(p); id1++; } } g2.clear(); for (int x=0; x<w; x++) for (int y=0; y<h; y++) if (b[x][y]) { p0.clear(); xmin=ymin=maxn; xmax=ymax=-1; dfs(x, y, b, xmin, xmax, ymin, ymax, p0); p=rot0(p0, xmin, xmax, ymin, ymax); g2.push_back(p); id2++; } if (id1!=id2) return false; sort(g1.begin(), g1.end()); sort(g2.begin(), g2.end()); GRAPH::iterator i=g1.begin(); GRAPH::iterator j=g2.begin(); while (i!=g1.end() && j!=g2.end()) { if (*i!=*j) i++; if (*i==*j) { j++; if (j==g2.end()) return true; } if (i==g1.end()) return false; } return false;}int main(){ int cs; scanf("%d", &cs); while (cs--) { init(); if (process()) printf("YESn"); else printf("NOn"); } return 0;}