#include <bits/stdc++.h>
#pragma warning(disable : 4996)
template <typename T>
T min(T x, T y) {
  return x < y ? x : y;
}
template <typename T>
T max(T x, T y) {
  return x > y ? x : y;
};
const long long INF = 20000000050000;
const long long mod = 1000000007;
const int MAXN = 1005;
const long long bit_len = 64;
const long long all1 =
    (((long long)1 << (bit_len - 1)) - 1) + ((long long)1 << (bit_len - 1));
struct SOLVE {
  int N;
  int len[MAXN], sum, half;
  std::bitset<MAXN * MAXN / 2> B[MAXN];
  std::vector<int> q1, q2;
  SOLVE() {
    N = sum = 0;
    memset(len, 0, sizeof(len));
  }
  void clear() {
    sum = half = 0;
    q1.clear(), q2.clear();
  }
  bool init() {
    scanf("%d", &N);
    for (int i = 1; i <= N; i++) scanf("%d", len + i), sum += len[i];
    if (sum & 1) return false;
    half = sum / 2;
    for (int i = 0; i <= N; i++) B[i].reset();
    B[0].set(0, 1);
    for (int i = 1; i <= N; i++) B[i] = (B[i - 1] | (B[i - 1] << len[i]));
    if (!B[N][half]) return false;
    return true;
  }
  void solve() {
    int t = half;
    for (int i = N; i >= 1; i--) {
      if (B[i][t] && !B[i - 1][t]) {
        q1.push_back(len[i]);
        t -= len[i];
      } else
        q2.push_back(len[i]);
    }
    if (q1.size() > q2.size()) std::swap(q1, q2);
    std::sort(q1.begin(), q1.end());
    std::sort(q2.begin(), q2.end());
  }
};
SOLVE solve1, solve2;
void print() {
  static int d[2][MAXN];
  static std::pair<double, int> p[MAXN];
  int x = 0, y = 0, n0 = 0, n1 = 0, np = 0;
  printf("YES\n");
  for (int i = 0; i < solve1.q1.size(); i++) d[0][++n0] = solve1.q1[i];
  for (int i = 0; i < solve1.q2.size(); i++) d[0][++n0] = -solve1.q2[i];
  for (int i = 0; i < solve2.q2.size(); i++) d[1][++n1] = solve2.q2[i];
  for (int i = 0; i < solve2.q1.size(); i++) d[1][++n1] = -solve2.q1[i];
  for (int i = 1; i <= n0; i++) p[++np] = {-atan2(d[0][i], d[1][i]), i};
  std::sort(p + 1, p + np + 1);
  for (int i = 1; i <= np; i++) {
    x += d[0][p[i].second];
    printf("%d %d\n", x, y);
    y += d[1][p[i].second];
    printf("%d %d\n", x, y);
  }
}
void work() {
  solve1.clear();
  solve2.clear();
  bool flag = false;
  if (!solve1.init()) flag = true;
  if (!solve2.init()) flag = true;
  if (flag || solve1.N != solve2.N) {
    printf("NO\n");
    return;
  }
  solve1.solve();
  solve2.solve();
  print();
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) work();
  return 0;
}
