#include <bits/stdc++.h>
using namespace std;
template <class t>
inline t read(t &x) {
  char c = getchar();
  bool f = 0;
  x = 0;
  while (!isdigit(c)) f |= c == '-', c = getchar();
  while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  if (f) x = -x;
  return x;
}
template <class t, class... A>
inline void read(t &x, A &...a) {
  read(x);
  read(a...);
}
template <class t>
inline void write(t x) {
  if (x < 0)
    putchar('-'), write(-x);
  else {
    if (x > 9) write(x / 10);
    putchar('0' + x % 10);
  }
}
const int N = 1005, M = 1e6 + 5;
int n, m, a[N], b[N];
bitset<M> f[N];
bool divide(int *a, vector<int> &a0, vector<int> &a1) {
  f[0][0] = 1;
  int s = 0;
  for (int i = 1; i <= n; i++) f[i] = f[i - 1] | f[i - 1] << a[i], s += a[i];
  if (s & 1 || !f[n][s >> 1]) return 0;
  for (int i = n, x = s >> 1; i; i--) {
    if (f[i - 1][x])
      a0.push_back(a[i]);
    else
      x -= a[i], a1.push_back(a[i]);
  }
  return 1;
}
void doit() {
  vector<int> a0, a1, b0, b1, A, B;
  read(n);
  for (int i = 1; i <= n; i++) read(a[i]);
  read(m);
  for (int i = 1; i <= m; i++) read(b[i]);
  if (n ^ m) {
    puts("No");
    return;
  }
  if (!divide(a, a0, a1) || !divide(b, b0, b1)) {
    puts("No");
    return;
  }
  if (a0.size() > a1.size()) swap(a0, a1);
  if (b0.size() < b1.size()) swap(b0, b1);
  sort((a0).begin(), (a0).end(), greater<int>());
  sort((a1).begin(), (a1).end(), greater<int>());
  sort((b0).begin(), (b0).end());
  sort((b1).begin(), (b1).end());
  for (int x : a0) A.push_back(x);
  for (int x : a1) A.push_back(-x);
  for (int x : b0) B.push_back(x);
  for (int x : b1) B.push_back(-x);
  puts("Yes");
  for (int i = 0, x = 0, y = 0; i < n; i++) {
    x += A[i];
    printf("%d %d\n", x, y);
    y += B[i];
    printf("%d %d\n", x, y);
  }
}
signed main() {
  int t;
  read(t);
  while (t--) doit();
}
