#include <bits/stdc++.h>
using namespace std;
long long x[100100], y[100100], c[100100], k[100100];
struct con {
  long long a, b, cost;
};
bool cmp(con r, con t) { return r.cost < t.cost; }
vector<con> neki;
long long p[100100], siz[100100];
long long fnd(long long u) {
  if (u == p[u]) return u;
  return fnd(p[u]);
}
long long join(long long r, long long t) {
  long long pr = fnd(r), pt = fnd(t);
  if (pr == pt) return 0;
  if (siz[pr] < siz[pt]) {
    p[pr] = pt;
    siz[pt] += siz[pr];
  } else {
    p[pt] = pr;
    siz[pr] += siz[pt];
  }
  return 1;
}
int main() {
  long long n;
  cin >> n;
  for (int i = 0; i < n + 1; i++) p[i] = i, siz[i] = 1;
  for (int i = 1; i < n + 1; i++) scanf("%lld%lld", &x[i], &y[i]);
  for (int i = 1; i < n + 1; i++) scanf("%lld", &c[i]);
  for (int i = 1; i < n + 1; i++) scanf("%lld", &k[i]);
  for (int i = 1; i < n + 1; i++) {
    con temp;
    temp.a = 0;
    temp.b = i;
    temp.cost = c[i];
    neki.push_back(temp);
  }
  for (int i = 1; i < n + 1; i++) {
    for (int j = 1; j < i; j++) {
      con temp;
      temp.a = i;
      temp.b = j;
      temp.cost = (k[i] + k[j]) * (abs(x[i] - x[j]) + abs(y[i] - y[j]));
      neki.push_back(temp);
    }
  }
  sort(neki.begin(), neki.end(), cmp);
  long long ans = 0;
  vector<long long> v;
  vector<pair<long long, long long>> e;
  for (auto&& era : neki) {
    if (join(era.a, era.b)) {
      ans += era.cost;
      if (era.a == 0)
        v.push_back(era.b);
      else
        e.push_back({era.a, era.b});
    }
  }
  cout << ans << endl;
  cout << v.size() << endl;
  for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
  if (v.size() != 0) cout << endl;
  cout << e.size() << endl;
  for (int i = 0; i < e.size(); i++)
    cout << e[i].first << " " << e[i].second << endl;
}
