#include <bits/stdc++.h>
int a[605], b[605], f[605], ed[605], next[605], son[605], S[605 * 605],
    T[605 * 605], F[605 * 605], n, m, v, l, x, y, L;
long long A, B, s[605];
int get(int x) { return !f[x] ? x : f[x] = get(f[x]); }
void pre(int x, int fa) {
  s[x] = a[x] - b[x];
  for (int p = son[x], y; p; p = next[p])
    if ((y = ed[p]) != fa) pre(y, x), s[x] += s[y];
}
void dfs(int x, int fa, int z) {
  for (int p = son[x], y, w, t; p; p = next[p])
    if ((y = ed[p]) != fa)
      if (s[y] > 0 && (w = s[y] < z ? s[y] : z) > 0)
        if (z -= w, a[y] >= w) {
          if (w) S[++L] = y, T[L] = x, F[L] = w, a[y] -= w, a[x] += w;
          if (a[y] < b[y]) dfs(y, x, b[y] - a[y]);
        } else {
          t = a[y];
          if (t) S[++L] = y, T[L] = x, F[L] = t, a[y] -= t, a[x] += t;
          dfs(y, x, w);
          if (w - t)
            S[++L] = y, T[L] = x, F[L] = w - t, a[y] -= w - t, a[x] += w - t;
        }
}
int main() {
  scanf("%d%d%d", &n, &v, &m);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = 1; i <= n; i++) scanf("%d", b + i);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    if (get(x) != get(y))
      f[get(x)] = get(y), ed[++l] = y, next[l] = son[x], son[x] = l,
      ed[++l] = x, next[l] = son[y], son[y] = l;
  }
  for (int i = 1; i <= n; i++) s[get(i)] += a[i] - b[i];
  for (int i = 1; i <= n; i++)
    if (s[i]) return puts("NO"), 0;
  for (int i = 1; i <= n; i++)
    if (a[i] < b[i]) pre(i, 0), dfs(i, 0, b[i] - a[i]);
  printf("%d\n", L);
  for (int i = 1; i <= L; i++) printf("%d %d %d\n", S[i], T[i], F[i]);
  return 0;
}
