#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, fail;
int G[305][305], v[305], u[305], l[305], z[305];
long long int A, B, C, a[305], b[305], d[305];
int rx[305 * 305 * 2], ry[305 * 305 * 2], rc[305 * 305 * 2], cnt;
void dfs(int x) {
  v[x] = 1;
  A += a[x];
  B += b[x];
  for (int i = (0); i < (n); i++)
    if (!v[i] && G[x][i]) G[x][i] = G[i][x] = 2, dfs(i);
  l[m++] = x;
}
void add(int x, int y, long long int c) {
  rx[cnt] = x + 1, ry[cnt] = y + 1, rc[cnt++] = (int)c;
}
void pull(int x, long long int d) {
  z[x] = 1;
  for (int i = (0); i < (n); i++)
    if (G[x][i] == 2 && !u[i] && d && !z[i]) {
      if (a[i] >= d) {
        a[i] -= d;
        a[x] += d;
        add(i, x, d);
        d = 0;
      } else {
        pull(i, d - a[i]);
        long long int t = min(d, a[i]);
        a[x] += t;
        a[i] -= t;
        d -= t;
        add(i, x, t);
      }
    }
}
void push(int x, long long int d) {
  z[x] = 1;
  for (int i = (0); i < (n); i++)
    if (G[x][i] == 2 && !u[i] && d && !z[i]) {
      if (C - a[i] >= d) {
        a[x] -= d;
        a[i] += d;
        add(x, i, d);
        d = 0;
      } else {
        push(i, d - (C - a[i]));
        long long int t = min(d, C - a[i]);
        a[i] += t;
        a[x] -= t;
        d -= t;
        add(x, i, t);
      }
    }
}
int main() {
  scanf("%d%I64d%d", &n, &C, &m);
  for (int i = (0); i < (n); i++) scanf("%I64d", &a[i]);
  for (int i = (0); i < (n); i++) scanf("%I64d", &b[i]);
  while (m--) {
    scanf("%d%d", &x, &y), x--, y--;
    G[x][y] = G[y][x] = 1;
  }
  for (int i = (0); i < (n); i++)
    if (!v[i]) {
      A = B = 0;
      m = 0;
      dfs(i);
      if (A != B) {
        fail = 1;
        break;
      }
      for (int j = (0); j < (m); j++) {
        int r = l[j];
        memset(z, 0, sizeof(z));
        if (a[r] > b[r]) push(r, a[r] - b[r]);
        if (a[r] < b[r]) pull(r, b[r] - a[r]);
        u[r] = 1;
      }
    }
  if (fail)
    puts("NO");
  else {
    printf("%d\n", cnt);
    for (int i = (0); i < (cnt); i++) printf("%d %d %d\n", rx[i], ry[i], rc[i]);
  }
  return 0;
}
