#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> adj;
vector<vector<long long>> adjW;
bool vis[2123];
int n;
set<pair<int, int>> edg;
vector<int> ps;
long long mst = 0;
int x[2123], y[2123], k[2123], c[2123];
void prim(int ini) {
  vis[ini] = 1;
  mst += c[ini];
  priority_queue<pair<long long, pair<int, int>>> heap;
  for (int i = 0; i < adj[ini].size(); i++)
    heap.push({-adjW[ini][i], {adj[ini][i], ini}});
  for (int i = 0; i < n; i++)
    if (i != ini) heap.push({-c[i], {i, i}});
  int cnt = 1;
  while (cnt < n) {
    pair<long long, pair<int, int>> at = heap.top();
    heap.pop();
    at.first *= -1;
    int from = at.second.second;
    int to = at.second.first;
    if (!vis[to]) {
      if (to != from)
        edg.insert({to, from});
      else
        ps.push_back(to);
      mst += at.first;
      vis[to] = 1;
      cnt++;
      for (int i = 0; i < adj[to].size(); i++)
        heap.push({-adjW[to][i], {adj[to][i], to}});
    }
  }
}
int main() {
  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];
  }
  adj.resize(n);
  adjW.resize(n);
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++) {
      long long dist = abs(x[i] - x[j]) + abs(y[i] - y[j]);
      adj[i].push_back(j);
      adjW[i].push_back(dist * (k[i] + k[j]));
      adj[j].push_back(i);
      adjW[j].push_back(dist * (k[i] + k[j]));
    }
  int mn = 2000000000;
  int ori;
  for (int i = 0; i < n; i++) {
    if (c[i] < mn) {
      mn = c[i];
      ori = i;
    }
  }
  ps.push_back(ori);
  prim(ori);
  printf("%lld\n", mst);
  printf("%d\n", ps.size());
  for (int i = 0; i < ps.size(); i++) {
    printf("%d%c", ps[i] + 1, " \n"[i == ps.size() - 1]);
  }
  printf("%d\n", edg.size());
  for (auto el : edg) {
    printf("%d %d\n", el.first + 1, el.second + 1);
  }
  return 0;
}
