#include <bits/stdc++.h>
using namespace std;
int n;
int x[2001], y[2001];
int p[2001], mn[2001];
int k[2001], c[2001];
bool used[2001][2001];
unsigned long long dst[2001][2001];
unsigned long long dist(int i, int j) {
  return (unsigned long long)(k[i] + k[j]) *
         (unsigned long long)(abs(x[i] - x[j]) + abs(y[i] - y[j]));
}
void init() {
  for (int i = 0; i < n; i++) {
    p[i] = i;
    mn[i] = c[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      dst[i][j] = dist(i, j);
      dst[j][i] = dst[i][j];
    }
  }
}
struct vertex {
  unsigned long long len;
  int x, y;
  vertex(){};
  vertex(unsigned long long _len, int _x, int _y) {
    len = _len;
    x = _x;
    y = _y;
  }
  bool operator<(vertex b) { return len < b.len; }
};
bool operator<(const vertex& a, const vertex& b) { return a.len < b.len; }
multiset<vertex> s;
int get_anc(int x) {
  if (x == p[x]) return x;
  return p[x] = get_anc(p[x]);
}
void unite(int x, int y) {
  x = get_anc(x);
  y = get_anc(y);
  if (x == y) return;
  if (x < y) swap(x, y);
  p[x] = y;
  mn[y] = min(mn[x], mn[y]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i];
  }
  for (int i = 0; i < n; i++) cin >> c[i];
  for (int i = 0; i < n; i++) cin >> k[i];
  init();
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      s.insert(vertex(dst[i][j], i, j));
    }
  }
  unsigned long long ans = 0;
  int conn = 0;
  while (!s.empty()) {
    vertex cur = *s.begin();
    s.erase(s.begin());
    unsigned long long curlen = cur.len;
    int curx = cur.x, cury = cur.y;
    if (get_anc(curx) == get_anc(cury)) continue;
    if (curlen + min(mn[get_anc(curx)], mn[get_anc(cury)]) >
        mn[get_anc(curx)] + mn[get_anc(cury)])
      continue;
    unite(curx, cury);
    ans += curlen;
    used[curx][cury] = used[cury][curx] = 1;
    conn++;
  }
  vector<int> way;
  for (int i = 0; i < n; i++) {
    int x = get_anc(i);
    if (c[i] == mn[x]) {
      ans += c[i];
      mn[i] = -1;
      way.push_back(i + 1);
    }
  }
  cout << ans << endl;
  cout << way.size() << endl;
  for (int i = 0; i < way.size(); i++) cout << way[i] << ' ';
  cout << endl;
  cout << conn << endl;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (used[i][j]) cout << i + 1 << ' ' << j + 1 << endl;
    }
  }
  return 0;
}
