#include <bits/stdc++.h>
using namespace std;
int n, x[2009], y[2009], par[2009];
long long c[2009], k[2009], ans;
vector<pair<long long, pair<long long, long long> > > a;
vector<int> p;
vector<pair<long long, long long> > edge;
int anc(int z) {
  if (par[z] == z)
    return z;
  else
    return par[z] = anc(par[z]);
}
void join(int u, int v) { par[anc(u)] = anc(v); }
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> x[i] >> y[i];
    par[i] = i;
  }
  for (int i = 1; i <= n; ++i) {
    cin >> c[i];
    a.push_back(pair<long long, pair<long long, long long> >(
        c[i], pair<long long, long long>(0, i)));
  }
  for (int i = 1; i <= n; ++i) cin >> k[i];
  for (int i = 1; i < n; ++i) {
    for (int j = i + 1; j <= n; ++j) {
      a.push_back(pair<long long, pair<long long, long long> >(
          (k[i] + k[j]) * (abs(x[i] - x[j]) + abs(y[i] - y[j])),
          pair<long long, long long>(i, j)));
    }
  }
  sort(a.begin(), a.end());
  for (pair<long long, pair<long long, long long> > i : a) {
    long long u = i.second.first;
    long long v = i.second.second;
    long long w = i.first;
    if (anc(u) != anc(v)) {
      join(u, v);
      ans += w;
      if (u == 0)
        p.push_back(v);
      else
        edge.push_back(pair<long long, long long>(u, v));
    }
  }
  cout << ans << '\n';
  cout << p.size() << '\n';
  for (int i : p) cout << i << ' ';
  cout << '\n';
  cout << edge.size() << '\n';
  for (pair<long long, long long> i : edge)
    cout << i.first << ' ' << i.second << '\n';
  return 0;
}
