#include <bits/stdc++.h>
int a[333], b[333], n, v, e, m[333][333], k[333][333], p[111111][3], o;
void add(int q, int w, int d) {
  p[o][0] = q + 1;
  p[o][1] = w + 1;
  p[o++][2] = d;
  a[w] += d;
  a[q] -= d;
}
void go(int q, int w, int d) {
  if (m[q][w]) {
    add(q, w, d);
    return;
  }
  for (int e = 0; e < n; e++) {
    if (k[q][e] != -1 && k[q][e] < k[q][w] && m[e][w]) {
      if (a[e] >= d) {
        add(e, w, d);
        go(q, e, d);
        break;
      } else {
        int s = d - a[e];
        add(e, w, a[e]);
        go(q, e, d);
        add(e, w, s);
        break;
      }
    }
  }
}
int main() {
  memset(k, -1, sizeof k);
  scanf("%d", &n);
  scanf("%d", &v);
  scanf("%d", &e);
  for (int q = 0; q < n; q++) {
    scanf("%d", &a[q]);
  }
  for (int q = 0; q < n; q++) {
    scanf("%d", &b[q]);
  }
  for (int q = 0; q < e; q++) {
    int u, v;
    scanf("%d", &u);
    scanf("%d", &v);
    u--;
    v--;
    m[u][v] = m[v][u] = 1;
    k[u][v] = k[v][u] = 1;
  }
  for (int q = 0; q < n; q++) {
    for (int w = 0; w < n; w++) {
      for (int e = 0; e < n; e++) {
        if (k[w][q] != -1 && k[q][e] != -1 &&
            (k[w][e] > k[w][q] + k[q][e] || k[w][e] == -1)) {
          k[w][e] = k[w][q] + k[q][e];
        }
      }
    }
  }
  o = 0;
  for (int i = 0; i < n; i++) {
    for (int q = 0; q < n; q++) {
      if (a[q] <= b[q]) continue;
      for (int w = 0; w < n; w++) {
        if (a[w] >= b[w] || k[q][w] == -1) continue;
        int d = (a[q] - b[q] < b[w] - a[w] ? a[q] - b[q] : b[w] - a[w]);
        go(q, w, d);
        break;
      }
    }
  }
  for (int q = 0; q < n; q++) {
    if (a[q] != b[q]) {
      printf("NO\n");
      return 0;
    }
  }
  printf("%d\n", o);
  for (int q = 0; q < o; q++) {
    printf("%d %d %d\n", p[q][0], p[q][1], p[q][2]);
  }
  return 0;
}
