#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000 + 5;
const long long mod7 = 1000000007;
pair<int, int> p[MAXN];
long long c[MAXN];
long long k[MAXN];
long long dist(int i, int j) {
  if (i == 0) return c[j];
  if (j == 0) return c[i];
  return (k[i] + k[j]) *
         (abs(p[i].first - p[j].first) + abs(p[i].second - p[j].second));
}
int main() {
  ios::sync_with_stdio(0);
  int n;
  cin >> n;
  n++;
  for (int i = 1; i < n; i++) {
    cin >> p[i].first >> p[i].second;
  }
  for (int i = 1; i < n; i++) {
    cin >> c[i];
  }
  for (int i = 1; i < n; i++) {
    cin >> k[i];
  }
  vector<int> nearest(n, 0);
  vector<int> used(n, 0);
  used[0] = 1;
  long long ans = 0;
  for (int i = 1; i < n; i++) {
    int besti = -1;
    for (int i = 0; i < n; i++) {
      if (!used[i] &&
          (besti == -1 || dist(i, nearest[i]) < dist(besti, nearest[besti]))) {
        besti = i;
      }
    }
    ans += dist(besti, nearest[besti]);
    used[besti] = 1;
    for (int i = 0; i < n; i++) {
      if (!used[i] && dist(i, nearest[i]) > dist(i, besti)) nearest[i] = besti;
    }
  }
  cout << ans << endl;
  vector<int> el;
  for (int i = 1; i < n; i++)
    if (nearest[i] == 0) el.push_back(i);
  vector<pair<int, int>> conn;
  for (int i = 1; i < n; i++)
    if (nearest[i] != 0) conn.push_back({i, nearest[i]});
  cout << el.size() << endl;
  for (int x : el) cout << x << " ";
  cout << endl;
  cout << conn.size() << endl;
  for (pair<int, int> x : conn) cout << x.first << " " << x.second << endl;
  return 0;
}
