#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int n, v, e;
bool bo[N][N], vis[N];
vector<int> path[N][N];
int a[N], b[N];
vector<int> G[N];
long long A, B;
void dfs(int x) {
  A += a[x];
  B += b[x];
  vis[x] = 1;
  for (int i = 0; i < G[x].size(); i++) {
    int u = G[x][i];
    if (vis[u]) continue;
    dfs(u);
  }
}
int ans, X[N * N], Y[N * N], D[N * N];
void dfs(int st, int pre, int ed) {
  path[st][ed] = path[st][pre];
  path[st][ed].push_back(ed);
  vis[ed] = 1;
  for (int i = 0; i < G[ed].size(); i++) {
    int u = G[ed][i];
    if (vis[u]) continue;
    dfs(st, ed, u);
  }
}
void work(int st, int ed, int flow, int id) {
  int tmp = path[st][ed][id];
  if (tmp == ed) return;
  int tmp1 = path[st][ed][++id];
  ++ans;
  X[ans] = tmp;
  Y[ans] = tmp1;
  D[ans] = max(0, flow - a[tmp1]);
  int rem = flow - D[ans];
  if (rem == flow) ans--;
  work(st, ed, flow, id);
  if (rem) {
    ++ans;
    X[ans] = tmp;
    Y[ans] = tmp1;
    D[ans] = rem;
  }
}
int main() {
  scanf("%d%d%d", &n, &v, &e);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = 1; i <= n; i++) scanf("%d", b + i);
  while (e--) {
    int x, y;
    scanf("%d%d", &x, &y);
    G[x].push_back(y);
    G[y].push_back(x);
    bo[x][y] = bo[y][x] = 1;
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i]) continue;
    A = B = 0;
    dfs(i);
    if (A != B) return puts("NO");
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++) bo[j][k] |= bo[j][i] && bo[i][k];
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) vis[j] = 0;
    dfs(i, 0, i);
  }
  while (1) {
    bool ok = 1;
    for (int i = 1; i <= n; i++) {
      if (b[i] >= a[i]) continue;
      for (int j = 1; j <= n; j++) {
        if (i == j || !bo[i][j]) continue;
        if (b[j] <= a[j]) continue;
        int flow = min(a[i] - b[i], b[j] - a[j]);
        work(i, j, flow, 0);
        a[i] -= flow;
        a[j] += flow;
        ok = 0;
      }
    }
    if (ok) break;
  }
  printf("%d\n", ans);
  for (int i = 1; i <= ans; i++) printf("%d %d %d\n", X[i], Y[i], D[i]);
}
