#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7, P2 = 998244353, INF = 0x3f3f3f3f;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long qpow(long long a, long long n) {
  long long r = 1 % P;
  for (a %= P; n; a = a * a % P, n >>= 1)
    if (n & 1) r = r * a % P;
  return r;
}
long long inv(long long first) {
  return first <= 1 ? 1 : inv(P % first) * (P - P / first) % P;
}
inline int rd() {
  int first = 0;
  char p = getchar();
  while (p < '0' || p > '9') p = getchar();
  while (p >= '0' && p <= '9') first = first * 10 + p - '0', p = getchar();
  return first;
}
const int N = 1e6 + 10;
int n, c1, d1;
struct _ {
  int first, id;
  bool operator<(const _ &rhs) const { return first < rhs.first; }
  void pr() { printf("x=%d,id=%d\n", first, id); }
} a[N], b[N], c[N], d[N];
int p1[N], p2[N], p3[N], cnt, f[N];
void add(int first, int second, int v) {
  ++cnt;
  if (f[first] > f[second]) puts("NO"), exit(0);
  p1[cnt] = first, p2[cnt] = second, p3[cnt] = v;
  f[first] += v, f[second] -= v;
}
int main() {
  scanf("%d", &n);
  long long s1 = 0, s2 = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i].first), a[i].id = i, s1 += a[i].first;
    f[i] = a[i].first;
  }
  for (int i = 1; i <= n; ++i)
    scanf("%d", &b[i].first), b[i].id = i, s2 += b[i].first;
  if (s1 != s2) return puts("NO"), 0;
  sort(a + 1, a + 1 + n);
  sort(b + 1, b + 1 + n);
  for (int i = 1; i <= n; ++i) {
    if (a[i].first < b[i].first)
      c[++c1] = {b[i].first - a[i].first, a[i].id};
    else if (a[i].first > b[i].first)
      d[++d1] = {a[i].first - b[i].first, a[i].id};
  }
  sort(d + 1, d + 1 + d1,
       [](_ first, _ second) { return f[first.id] > f[second.id]; });
  sort(c + 1, c + 1 + c1,
       [](_ first, _ second) { return f[first.id] > f[second.id]; });
  int now = 1;
  for (int i = 1; i <= d1; ++i) {
    while (now <= c1 && c[now].first <= d[i].first) {
      add(c[now].id, d[i].id, c[now].first);
      d[i].first -= c[now].first, ++now;
    }
    if (d[i].first) {
      add(c[now].id, d[i].id, d[i].first);
      c[now].first -= d[i].first;
    }
  }
  puts("YES");
  printf("%d\n", cnt);
  for (int i = 1; i <= cnt; ++i) printf("%d %d %d\n", p1[i], p2[i], p3[i]);
}
