#include <bits/stdc++.h>
using namespace std;
const long long N = 300010;
const double pi = 4 * atan(1);
const double eps = 1e-6;
long long t, n, m, x[N], y[N], c[N], k[N], fin;
vector<long long> lit, adj[N], cost[N];
vector<pair<long long, long long>> eg;
bool vis[N];
struct info {
  long long u, v, w;
};
vector<info> mst;
priority_queue<pair<long long, pair<long long, long long>>> pq;
void Prims() {
  int ok = 0;
  vis[0] = 1;
  int sz = adj[0].size();
  for (int i = 0; i < sz; i++) {
    pq.push({-cost[0][i], {0, adj[0][i]}});
  }
  while (!pq.empty() && ok < n) {
    auto top = pq.top();
    pq.pop();
    long long u = top.second.first, v = top.second.second, w = -top.first;
    if (vis[v] == 0) {
      vis[v] = 1;
      mst.push_back({u, v, w});
      ok++;
      int sz = adj[v].size();
      for (int i = 0; i < sz; i++) {
        pq.push({-cost[v][i], {v, adj[v][i]}});
      }
    }
  }
}
int solve() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> x[i] >> y[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> c[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> k[i];
  }
  for (int i = 0; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      adj[i].push_back(j);
      if (i == 0) {
        cost[i].push_back(c[j]);
      } else {
        cost[i].push_back((k[i] + k[j]) *
                          (abs(x[i] - x[j]) + abs(y[i] - y[j])));
      }
    }
  }
  Prims();
  for (auto e : mst) {
    fin += e.w;
    if (e.u == 0 || e.v == 0) {
      lit.push_back(max(e.u, e.v));
    } else {
      eg.push_back({e.u, e.v});
    }
  }
  printf("%lld\n", fin);
  long long sz = lit.size();
  printf("%lld\n", sz);
  for (auto u : lit) {
    printf("%lld ", u);
  }
  printf("\n");
  sz = eg.size();
  printf("%lld\n", sz);
  for (auto u : eg) {
    printf("%lld %lld\n", u.first, u.second);
  }
  return 0;
}
int main() { return solve(); }
