#include <bits/stdc++.h>
inline long long ceil_div(long long a, long long b) { return (a + b - 1) / b; }
using namespace std;
inline int qr() {
  int f = 0, fu = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') fu = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    f = (f << 3) + (f << 1) + (c & 15);
    c = getchar();
  }
  return f * fu;
}
const int N = 1e6 + 10, M = N * 4;
const long long INF = 2e18;
struct DINIC {
  int head[N << 1], ver[M << 1], Next[M << 1], d[N << 1];
  int s, t, tot = 1, n;
  queue<int> q;
  long long mxf, edge[M << 1];
  inline void init() {
    memset(head, 0, sizeof(int) * (n + 1));
    tot = 1, mxf = n = 0;
  }
  inline void add(int x, int y, int z) {
    n = max({n, x, y});
    ver[++tot] = y, edge[tot] = z, Next[tot] = head[x], head[x] = tot;
    ver[++tot] = x, edge[tot] = 0, Next[tot] = head[y], head[y] = tot;
  }
  inline bool bfs() {
    memset(d, 0, sizeof(int) * (n + 1));
    while (!q.empty()) q.pop();
    q.push(s), d[s] = 1;
    while (!q.empty()) {
      int x = q.front();
      q.pop();
      for (int i = head[x]; i; i = Next[i])
        if (edge[i] && !d[ver[i]]) {
          q.push(ver[i]);
          d[ver[i]] = d[x] + 1;
          if (ver[i] == t) return true;
        }
    }
    return false;
  }
  long long dinic(int x, long long flow) {
    if (x == t) return flow;
    long long rest = flow, k;
    for (int i = head[x]; i && rest; i = Next[i])
      if (edge[i] && d[ver[i]] == d[x] + 1) {
        k = dinic(ver[i], min(rest, 1ll * edge[i]));
        if (!k) d[ver[i]] = 0;
        edge[i] -= k, edge[i ^ 1] += k, rest -= k;
      }
    return flow - rest;
  }
  inline long long solve() {
    long long flow;
    while (bfs())
      while ((flow = dinic(s, INF))) mxf += flow;
    return mxf;
  }
} D;
int a[N], b[N], n, T;
int main() {
  T = qr();
  while (T--) {
    n = qr();
    for (register int i = 1; i <= n; ++i) a[i] = qr();
    for (register int i = 1; i <= n; ++i) b[i] = qr();
    D.init();
    D.s = 0, D.t = 2 * n + 1;
    for (int i = 1; i <= n; i++) D.add(0, i, b[i]);
    for (int i = 1; i <= n; i++) D.add(n + i, 2 * n + 1, a[i]);
    for (int i = 1; i <= n; i++) {
      D.add(i, n + i, b[i]);
      if (i < n)
        D.add(i, n + i + 1, b[i]);
      else
        D.add(i, n + 1, b[i]);
    }
    long long sum = 0;
    for (int i = 1; i <= n; i++) sum += a[i];
    puts(D.solve() == sum ? "YES" : "NO");
  }
  return 0;
}
