#include <bits/stdc++.h>
using namespace std;
const int MX = 2003;
bool vis[MX];
pair<long long, int> mine[MX];
vector<pair<long long, int> > adj[MX];
vector<pair<long long, int> > mst[MX];
vector<int> ps;
long long X[MX], Y[MX], C[MX], K[MX], cnt = 0;
long long cost(int u, int v) {
  long long d = abs(X[u] - X[v]) + abs(Y[u] - Y[v]);
  return d * (K[u] + K[v]);
}
void compute_min(int n, int s) {
  for (int u = 1; u <= n; u++) {
    if (u != s) mine[u] = {cost(u, s), s};
    for (int v = 1; v <= n; v++) {
      if (u == v) continue;
      pair<long long, int> p = {cost(u, v), v};
      adj[u].push_back(p);
    }
  }
}
long long prim(int n, int s) {
  long long mstw = C[s];
  vis[s] = true;
  ps.push_back(s);
  for (int i = 1; i < n; i++) {
    int v = -1;
    int c = -1;
    for (int u = 1; u <= n; u++) {
      if (vis[u]) continue;
      if (v == -1 || mine[u] < mine[v]) v = u;
      if (c == -1 || C[u] < C[c]) c = u;
    }
    if (mine[v].first < C[c]) {
      mstw += mine[v].first, cnt++;
      mst[v].push_back(mine[v]);
    } else {
      v = c, mstw += C[c];
      ps.push_back(v);
    }
    vis[v] = true;
    int l = adj[v].size();
    for (int j = 0; j < l; j++) {
      int u = adj[v][j].second;
      pair<long long, int> p = {adj[v][j].first, v};
      mine[u] = min(mine[u], p);
    }
  }
  return mstw;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld %lld", &X[i], &Y[i]);
  }
  int s = 1;
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &C[i]);
    if (C[i] <= C[s]) s = i;
  }
  for (int i = 1; i <= n; i++) scanf("%lld", &K[i]);
  compute_min(n, s);
  long long x = prim(n, s);
  int p = ps.size();
  printf("%lld\n%d\n", x, p);
  for (int i = 0; i < p; i++) printf("%d ", ps[i]);
  if (p) printf("\n");
  printf("%lld\n", cnt);
  for (int u = 1; u <= n; u++) {
    int l = mst[u].size();
    for (int i = 0; i < l; i++) {
      int v = mst[u][i].second;
      printf("%d %d\n", u, v);
    }
  }
  return 0;
}
