#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, v, e, x, y, a[300], b[300], d[300][300], S, X[1 << 20],
    Y[1 << 20], D[1 << 20];
void m(int x, int y, int f) {
  if (d[x][y] == 1) {
    if (f) {
      a[y] -= f, a[x] += f, X[S] = y, Y[S] = x, D[S] = f;
      S++;
    };
  } else {
    int z;
    for (z = 0; z < n; z++)
      if (d[x][z] == 1 && 1 + d[z][y] == d[x][y]) break;
    if (a[z] >= f) {
      if (f) {
        a[z] -= f, a[x] += f, X[S] = z, Y[S] = x, D[S] = f;
        S++;
      };
      m(z, y, f);
    } else {
      int t = a[z];
      if (t) {
        a[z] -= t, a[x] += t, X[S] = z, Y[S] = x, D[S] = t;
        S++;
      };
      f -= t;
      m(z, y, t + f);
      if (f) {
        a[z] -= f, a[x] += f, X[S] = z, Y[S] = x, D[S] = f;
        S++;
      };
    }
  }
}
int main() {
  cin >> n >> v >> e;
  for (i = 0; i < n; i++) cin >> a[i];
  for (i = 0; i < n; i++) cin >> b[i];
  memset(d, 63, sizeof d);
  for (i = 0; i < e; i++) {
    cin >> x >> y;
    x--, y--;
    d[x][y] = d[y][x] = 1;
  }
  for (k = 0; k < n; k++)
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      if (d[i][j] < n && a[i] < b[i] && a[j] > b[j])
        m(i, j, min(b[i] - a[i], a[j] - b[j]));
  for (i = 0; i < n; i++)
    if (a[i] != b[i]) {
      cout << "NO\n";
      return 0;
    }
  cout << S << '\n';
  for (i = 0; i < S; i++)
    cout << X[i] + 1 << ' ' << Y[i] + 1 << ' ' << D[i] << '\n';
  return 0;
}
