#include <bits/stdc++.h>
using namespace std;
long long n;
pair<long long, long long> a[300005];
long long t[300005];
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  long long sum1 = 0, sum2 = 0;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].first;
    a[i].second = i;
    sum1 += a[i].first;
  }
  for (int i = 1; i <= n; i++) {
    cin >> t[i];
    sum2 += t[i];
  }
  if (sum1 != sum2) {
    cout << "NO" << endl;
    return 0;
  }
  sort(a + 1, a + n + 1);
  sort(t + 1, t + 1 + n);
  long long s = 0;
  deque<pair<long long, long long> > v1, v2;
  for (int i = 1; i <= n; i++) {
    long long def = t[i] - a[i].first;
    s += def;
    if (def < 0) {
      v2.push_back({i, -def});
    } else if (def > 0) {
      v1.push_back({i, def});
    }
    if (s < 0) {
      cout << "NO" << endl;
      return 0;
    }
  }
  if (s != 0) {
    cout << "NO" << endl;
    return 0;
  }
  int i = 0;
  int j = 0;
  vector<pair<long long, pair<long long, long long> > > ans;
  while (i < v1.size() && j < v2.size()) {
    int ii = v1[i].first;
    int jj = v2[j].first;
    long long x1 = a[ii].first;
    long long idx1 = a[ii].second;
    long long x2 = a[jj].first;
    long long idx2 = a[jj].second;
    long long def1 = v1[i].second;
    long long def2 = v2[j].second;
    long long mn = min(def1, def2);
    ans.push_back({idx1, {idx2, mn}});
    def1 -= mn;
    def2 -= mn;
    if (def1 == 0) {
      v1.pop_front();
    } else {
      v1[0].second = def1;
    }
    if (def2 == 0) {
      v2.pop_front();
    } else {
      v2[0].second = def2;
    }
  }
  cout << "YES" << endl;
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i].first << " " << ans[i].second.first << " "
         << ans[i].second.second << endl;
  }
  return 0;
}
