#include <bits/stdc++.h>
const int max_N = 1005;
long long n, m, a[max_N], b[max_N];
std::bitset<max_N * max_N> F[max_N];
long long read() {
  char c = getchar();
  long long ans = 0;
  bool flag = true;
  while (c < '0' || c > '9') flag &= (c != '-'), c = getchar();
  while (c >= '0' && c <= '9') ans = ans * 10 + c - '0', c = getchar();
  return flag ? ans : -ans;
}
void Write(long long x) {
  if (x < 10)
    putchar(x + '0');
  else
    Write(x / 10), putchar(x % 10 + '0');
}
long long max(long long x, long long y) { return x > y ? x : y; }
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
bool cmp1(std::pair<long long, long long> A,
          std::pair<long long, long long> B) {
  return A.second * B.first < A.first * B.second;
}
bool cmp2(std::pair<long long, long long> A,
          std::pair<long long, long long> B) {
  return A.second * B.first > A.first * B.second;
}
std::pair<std::vector<long long>, std::vector<long long> > divide(
    std::vector<long long> X) {
  for (long long i = 0; i <= X.size(); i++) F[i].reset();
  F[0][0] = 1;
  long long sum = 0;
  for (long long i = 0; i < X.size(); i++)
    F[i + 1] = F[i] | (F[i] << X[i]), sum += X[i];
  if (sum % 2 || !F[X.size()][sum / 2])
    return std::make_pair(std::vector<long long>(), std::vector<long long>());
  std::vector<long long> U, V;
  long long pos = sum / 2;
  for (long long i = X.size(); i; i--)
    if (F[i - 1][pos])
      V.push_back(X[i - 1]);
    else
      U.push_back(X[i - 1]), pos -= X[i - 1];
  if (U.size() > V.size()) std::swap(U, V);
  return std::make_pair(U, V);
}
void solve() {
  std::vector<long long> X, Y;
  n = read();
  for (long long i = 0; i < n; i++) X.push_back(read());
  std::pair<std::vector<long long>, std::vector<long long> > A = divide(X);
  m = read();
  for (long long i = 0; i < m; i++) Y.push_back(read());
  std::pair<std::vector<long long>, std::vector<long long> > B = divide(Y);
  if ((A.first.empty() && A.second.empty()) ||
      (B.first.empty() && B.second.empty()) || n != m)
    return printf("No\n"), void();
  std::vector<std::pair<long long, long long> > U, V, W;
  printf("YES\n");
  for (long long i = 0; i < B.first.size(); i++)
    U.push_back(std::make_pair(A.second[i], B.first[i]));
  for (long long i = B.first.size(); i < A.second.size(); i++)
    V.push_back(std::make_pair(A.second[i], B.second[i - B.first.size()]));
  for (long long i = A.second.size(); i < n; i++)
    W.push_back(std::make_pair(A.first[i - A.second.size()],
                               B.second[i - B.first.size()]));
  std::sort(U.begin(), U.end(), cmp2), std::sort(W.begin(), W.end(), cmp1);
  std::reverse(W.begin(), W.end());
  long long x = 0, y = 0;
  for (auto i : U)
    y += i.second, Write(x), putchar(' '), Write(y), putchar('\n'),
        x += i.first, Write(x), putchar(' '), Write(y), putchar('\n');
  for (auto i : V)
    y -= i.second, Write(x), putchar(' '), Write(y), putchar('\n'),
        x += i.first, Write(x), putchar(' '), Write(y), putchar('\n');
  for (auto i : W)
    y -= i.second, Write(x), putchar(' '), Write(y), putchar('\n'),
        x -= i.first, Write(x), putchar(' '), Write(y), putchar('\n');
}
int main() {
  long long t = read();
  while (t--) solve();
  return 0;
}
