#include <bits/stdc++.h>
using namespace std;
long long N, E, V;
long long e, ans;
long long son[310];
long long A[310], B[310];
long long f[310];
long long ed[610], nxt[610];
long long second[200010], T[200010], W[200010];
long long p[310], C[310];
void adde(long long i, long long j) {
  e++;
  ed[e] = j;
  nxt[e] = son[i];
  son[i] = e;
}
long long findr(long long i) {
  if (f[i] == i) return i;
  return f[i] = findr(f[i]);
}
void update(long long s, long long t, long long w) {
  if (w <= 0) return;
  second[++ans] = s;
  T[ans] = t;
  W[ans] = w;
  A[s] -= w;
}
void dfs2(long long i, long long lst) {
  p[i] = A[i] - B[i];
  for (long long j = son[i]; j; j = nxt[j])
    if (ed[j] != lst) {
      dfs2(ed[j], i);
      p[i] += p[ed[j]];
    }
}
void dfs(long long i, long long lst, long long P) {
  long long tmp, Tmp;
  for (long long j = son[i]; j && P > 0; j = nxt[j])
    if (ed[j] != lst && p[ed[j]] > 0) {
      if (p[ed[j]] < P)
        tmp = p[ed[j]];
      else
        tmp = P;
      A[i] += tmp;
      P -= tmp;
      if (A[ed[j]] > B[ed[j]]) {
        if (A[ed[j]] >= tmp) {
          update(ed[j], i, tmp);
          if (A[ed[j]] < B[ed[j]]) dfs(ed[j], i, B[ed[j]] - A[ed[j]]);
        } else {
          tmp -= A[ed[j]];
          update(ed[j], i, A[ed[j]]);
          dfs(ed[j], i, B[ed[j]] + tmp);
          update(ed[j], i, tmp);
        }
      } else {
        if (A[ed[j]] >= tmp) {
          update(ed[j], i, tmp);
          dfs(ed[j], i, tmp);
        } else {
          Tmp = tmp - A[ed[j]];
          update(ed[j], i, A[ed[j]]);
          dfs(ed[j], i, tmp);
          update(ed[j], i, Tmp);
        }
      }
    }
}
signed main() {
  cin >> N >> V >> E;
  for (long long i = 1; i <= N; i++) cin >> A[i];
  for (long long i = 1; i <= N; i++) cin >> B[i];
  for (long long i = 1; i <= N; i++) f[i] = i;
  for (long long i = 1, x, y, f1, f2; i <= E; i++) {
    cin >> x >> y;
    f1 = findr(x);
    f2 = findr(y);
    if (f1 != f2) {
      adde(x, y);
      adde(y, x);
      f[f1] = f2;
    }
  }
  for (long long i = 1; i <= N; i++) f[i] = findr(i);
  for (long long i = 1; i <= N; i++) {
    C[f[i]] += A[i];
    C[f[i]] -= B[i];
  }
  for (long long i = 1; i <= N; i++)
    if (C[i] != 0) {
      puts("NO");
      return 0;
    }
  for (long long i = 1; i <= N; i++)
    if (A[i] < B[i]) {
      dfs2(i, 0);
      dfs(i, 0, B[i] - A[i]);
    }
  cout << ans << endl;
  for (long long i = 1; i <= ans; i++)
    cout << second[i] << ' ' << T[i] << ' ' << W[i] << endl;
  return 0;
}
