#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 10;
const int MN = 2e5 + 10, LG = 20;
int n, m, w[MN], cost[MN];
vector<pair<int, int> > adj[MN];
int par[LG][MN], Mx[LG][MN];
int Sz[MN], Par[MN];
long long Mst;
int es[MN], ee[MN], el[MN], h[MN];
bool is[MN];
pair<int, int> edge[MN];
int S;
int root(int a) {
  if (Par[a] == a) return a;
  return Par[a] = root(Par[a]);
}
void Union(int a, int b) {
  a = root(a), b = root(b);
  if (a == b) return;
  if (Sz[a] > Sz[b]) swap(a, b);
  Par[a] = b, Sz[b] += Sz[a];
}
void make_mst() {
  iota(Par, Par + MN, 0);
  fill(Sz, Sz + MN, 1);
  for (int i = 0; i < m; ++i) {
    int id = edge[i].second;
    if (root(es[id]) == root(ee[id])) continue;
    Mst += el[id];
    adj[es[id]].push_back(make_pair(ee[id], id));
    adj[ee[id]].push_back(make_pair(es[id], id));
    is[id] = true;
    Union(es[id], ee[id]);
  }
}
void dfs(int s, int pr) {
  par[0][s] = pr;
  for (int i = 1; i < LG; ++i)
    if (par[i - 1][s] == -1)
      par[i][s] = -1, Mx[i][s] = Mx[i - 1][s];
    else {
      par[i][s] = par[i - 1][par[i - 1][s]];
      if (el[Mx[i - 1][s]] < el[Mx[i - 1][par[i - 1][s]]])
        Mx[i][s] = Mx[i - 1][par[i - 1][s]];
      else
        Mx[i][s] = Mx[i - 1][s];
    }
  for (int i = 0; i < ((int)(adj[s]).size()); ++i) {
    int v = adj[s][i].first, e = adj[s][i].second;
    if (v == pr) continue;
    h[v] = h[s] + 1;
    Mx[0][v] = e;
    dfs(v, s);
  }
}
int get(int u, int v) {
  int ret = -1;
  if (h[u] < h[v]) swap(u, v);
  int k = h[u] - h[v];
  for (int i = 0; i < LG; ++i) {
    if (k & (1 << i)) {
      if (ret == -1 || el[ret] < el[Mx[i][u]]) ret = Mx[i][u];
      u = par[i][u];
    }
  }
  if (u == v) return ret;
  for (int i = LG - 1; ~i; --i) {
    if (par[i][v] != par[i][u]) {
      if (ret == -1 || el[ret] < el[Mx[i][u]]) ret = Mx[i][u];
      if (ret == -1 || el[ret] < el[Mx[i][v]]) ret = Mx[i][v];
      v = par[i][v], u = par[i][u];
    }
  }
  if (ret == -1 || el[ret] < el[Mx[0][v]]) ret = Mx[0][v];
  if (ret == -1 || el[ret] < el[Mx[0][u]]) ret = Mx[0][u];
  return ret;
}
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; ++i) cin >> el[i];
  for (int i = 0; i < m; ++i) cin >> cost[i];
  for (int i = 0; i < m; ++i) {
    cin >> es[i] >> ee[i];
    --es[i], --ee[i];
    edge[i] = make_pair(el[i], i);
  }
  sort(edge, edge + m);
  cin >> S;
  make_mst();
  dfs(0, -1);
  long long ans = (long long)(1e18), tg, tg1;
  for (int i = 0; i < m; ++i) {
    int t = S / cost[i];
    int e = get(es[i], ee[i]);
    int val = el[e];
    long long tmp = Mst + (el[i] - t) - val;
    if (tmp < ans) ans = tmp, tg = i, tg1 = e;
  }
  cout << ans << endl;
  for (int i = 0; i < m; ++i) {
    if (i != tg1 && i != tg && !is[i]) continue;
    if (i == tg)
      cout << i + 1 << ' ' << el[tg] - S / cost[tg] << endl;
    else if (is[i] && i != tg1)
      cout << i + 1 << ' ' << el[i] << endl;
  }
  return 0;
}
