#include <bits/stdc++.h>
using namespace std;
void bug() { cout << " " << endl; }
template <class T>
void bug(T a) {
  cout << a << "  ";
}
template <class T>
void bug(T* a, int n) {
  for (int i = 0; i < (n); i++) bug(a[i]);
}
int n, g[311][311];
long long a[311], b[311], v;
char buf[11111111];
char* p = buf;
int total = 0;
int vis[311];
int q[311], head, tail, front[311];
void do_it(int u) {
  head = tail = 0;
  q[tail++] = u;
  memset(vis, 0, sizeof(vis));
  memset(front, -1, sizeof(front));
  vis[u] = 1;
  while (tail - head > 0) {
    int cur = q[head++];
    for (int i = 0; i < (n); i++)
      if (g[cur][i] && !vis[i]) {
        front[i] = cur;
        vis[i] = 1;
        q[tail++] = i;
      }
  }
  for (int i = 0; i < (tail); i++)
    if (a[u] < b[u]) {
      if (a[q[i]] <= b[q[i]]) continue;
      int rest = min(b[u] - a[u], a[q[i]] - b[q[i]]);
      while (rest > 0) {
        int delta = min(rest, (int)(v + 1) / 2);
        rest -= delta;
        int w = q[i];
        while (true) {
          int np = front[w];
          vector<int> vec;
          vec.push_back(w);
          vec.push_back(np);
          while (delta + a[np] > v) {
            np = front[np];
            vec.push_back(np);
          }
          for (int i = vec.size() - 1; i > 0; --i) {
            total++;
            int k = sprintf(p, "%d %d %d\n", vec[i - 1] + 1, vec[i] + 1, delta);
            p += k;
          }
          w = vec.back();
          if (w == u) break;
        }
        a[u] += delta;
        a[q[i]] -= delta;
      }
    }
  if (a[u] != b[u]) {
    cout << "NO" << endl;
    exit(0);
  }
}
int main() {
  int m;
  cin >> n >> v >> m;
  for (int i = 0; i < (n); i++) cin >> a[i];
  for (int i = 0; i < (n); i++) cin >> b[i];
  for (int i = 0; i < (m); i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    g[x][y] = g[y][x] = 1;
  }
  long long s = 0;
  for (int i = 0; i < (n); i++) s += a[i];
  for (int i = 0; i < (n); i++) s -= b[i];
  if (s != 0) {
    cout << "NO" << endl;
    return 0;
  }
  for (int i = 0; i < (n); i++)
    if (a[i] < b[i]) do_it(i);
  printf("%d\n%s", total, buf);
  return 0;
}
