#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
long long g, h, l;
const long long N = 2003;
vector<pair<long long, long long>> sel;
long long add(long long a, long long b);
long long mul(long long a, long long b);
long long binpo(long long a, long long b);
long long par[N];
long long ranks[N];
long long find_par(long long a) {
  if (par[a] == a) {
    return a;
  }
  return par[a] = find_par(par[a]);
}
void merge(long long a, long long b) {
  long long pa = find_par(a);
  long long pb = find_par(b);
  if (pa == pb) {
    return;
  }
  if (ranks[pb] > ranks[pa]) {
    swap(pa, pb);
  }
  par[pb] = pa;
  if (ranks[pa] == ranks[pb]) {
    ranks[pa]++;
  }
}
long long kruskal(vector<pair<long long, pair<long long, long long>>> &v) {
  long long w, minCost = 0;
  long long x, y;
  for (auto i : v) {
    w = i.first;
    x = i.second.first;
    y = i.second.second;
    if (find_par(x) != find_par(y)) {
      minCost += w;
      merge(x, y);
      sel.push_back({x, y});
    }
  }
  return minCost;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  vector<long long> adj[N];
  vector<pair<long long, long long>> cor;
  vector<pair<long long, pair<long long, long long>>> ed;
  for (long long i = 0; i < N; i++) {
    par[i] = i;
    ranks[i] = 0;
  }
  for (long long i = 0; i < n; i++) {
    cin >> g >> h;
    cor.push_back({g, h});
  }
  vector<long long> k, c;
  for (long long i = 0; i < n; i++) {
    cin >> g;
    c.push_back(g);
  }
  for (long long i = 0; i < n; i++) {
    cin >> g;
    k.push_back(g);
  }
  map<pair<long long, long long>, long long> m;
  for (long long i = 0; i < n; i++) {
    for (long long j = i + 1; j <= n - 1; j++) {
      ed.push_back({(k[i] + k[j]) * (abs(cor[i].first - cor[j].first) +
                                     abs(cor[i].second - cor[j].second)),
                    {i, j}});
    }
  }
  for (long long i = 0; i < n; i++) {
    ed.push_back({c[i], {i, n}});
  }
  sort(ed.begin(), ed.end());
  long long minCost = kruskal(ed);
  cout << minCost << endl;
  long long cnt = 0;
  for (auto i : sel) {
    if (i.first == n or i.second == n) {
      cnt++;
    }
  }
  cout << cnt << endl;
  for (auto i : sel) {
    if (i.first == n or i.second == n) {
      cout << min(i.first, i.second) + 1 << endl;
      ;
    }
  }
  cout << (long long)sel.size() - cnt << endl;
  for (auto i : sel) {
    if (i.first == n or i.second == n) {
      continue;
    } else {
      cout << i.first + 1 << " " << i.second + 1 << endl;
    }
  }
}
long long add(long long a, long long b) { return (a % MOD + b % MOD) % MOD; }
long long mul(long long a, long long b) { return (a * 1ll * b) % MOD; }
long long binpo(long long a, long long b) {
  int ans = 1;
  while (b) {
    if (b % 2 != 0) {
      ans = mul(ans, a);
    }
    a = mul(a, a);
    b = b / 2;
  }
  return ans;
}
