#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 9;
struct pt {
  long long x, y;
};
struct edge {
  long long cost, u, v;
};
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  vector<pt> ps(n + 1);
  for (long long i = (long long)(1); i < (long long)(n + 1); ++i)
    cin >> ps[i].x >> ps[i].y;
  vector<long long> c(n + 1), k(n + 1);
  for (long long i = (long long)(1); i < (long long)(n + 1); ++i) cin >> c[i];
  for (long long i = (long long)(1); i < (long long)(n + 1); ++i) cin >> k[i];
  vector<long long> p(n + 1, 0), used(n + 1, 0), d(n + 1, 0);
  for (long long i = (long long)(1); i < (long long)(n + 1); ++i) d[i] = c[i];
  used[0] = 1;
  vector<long long> ansv;
  vector<pair<long long, long long> > anse;
  long long ans = 0;
  for (long long _ = (long long)(0); _ < (long long)(n); ++_) {
    long long v = -1;
    for (long long i = (long long)(0); i < (long long)(n + 1); ++i) {
      if (!used[i] && (v == -1 || d[v] > d[i])) v = i;
    }
    if (!p[v])
      ansv.push_back(v);
    else
      anse.push_back({p[v], v});
    used[v] = 1;
    ans += d[v];
    for (long long i = (long long)(0); i < (long long)(n + 1); ++i) {
      if (!used[i]) {
        long long len =
            (abs(ps[i].x - ps[v].x) + abs(ps[i].y - ps[v].y)) * (k[i] + k[v]);
        if (d[i] > len) {
          d[i] = len;
          p[i] = v;
        }
      }
    }
  }
  cout << ans << '\n' << ansv.size() << '\n';
  for (auto ix : ansv) cout << ix << ' ';
  cout << '\n' << anse.size() << '\n';
  for (auto ix : anse) cout << ix.first << ' ' << ix.second << '\n';
  return 0;
}
