#include <bits/stdc++.h>
using namespace std;
const int N = 1003, K = N * N >> 1;
template <typename T>
void read(T &x) {
  int ch = getchar();
  x = 0;
  bool f = false;
  for (; ch < '0' || ch > '9'; ch = getchar()) f |= ch == '-';
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  if (f) x = -x;
}
int t, n, m, x[N], y[N], suma, sumb;
bitset<K> f[N];
vector<int> xa, xb, ya, yb;
bool work(int *x, vector<int> &x1, vector<int> &x2, int sum) {
  f[0].set(0);
  x1.resize(0);
  x2.resize(0);
  for (int i = 1; i <= n; ++i) f[i] = f[i - 1] | f[i - 1] << x[i];
  if (!f[n][sum]) return true;
  for (int i = n; i; --i)
    if (sum >= x[i] && f[i - 1][sum - x[i]]) {
      x1.emplace_back(x[i]);
      sum -= x[i];
    } else
      x2.emplace_back(x[i]);
  sort(x1.begin(), x1.end());
  sort(x2.begin(), x2.end());
  return false;
}
void solve() {
  read(n);
  suma = sumb = 0;
  for (int i = 1; i <= n; ++i) {
    read(x[i]);
    suma += x[i];
  }
  read(m);
  for (int i = 1; i <= m; ++i) {
    read(y[i]);
    sumb += y[i];
  }
  if (n != m || (suma & 1) || (sumb & 1) || work(x, xa, xb, suma >> 1) ||
      work(y, ya, yb, sumb >> 1)) {
    puts("No");
    return;
  }
  puts("Yes");
  if (xa.size() > xb.size()) swap(xa, xb);
  if (ya.size() < yb.size()) swap(ya, yb);
  auto it1 = xa.end(), it2 = ya.begin();
  int dir1 = 1, dir2 = 1, nowx = 0, nowy = 0;
  for (int _ = 0; _ < n; ++_) {
    --it1;
    nowx += (*it1) * dir1;
    printf("%d %d\n", nowx, nowy);
    nowy += (*it2) * dir2;
    ++it2;
    printf("%d %d\n", nowx, nowy);
    if (it1 == xa.begin()) {
      it1 = xb.end();
      dir1 = -1;
    }
    if (it2 == ya.end()) {
      it2 = yb.begin();
      dir2 = -1;
    }
  }
}
int main() {
  read(t);
  while (t--) solve();
}
