#include <bits/stdc++.h>
using namespace std;
const long long init = 1e9 + 7;
const long long N = 2010;
const long long inf = 1e18 + 7;
vector<long long> dist(N, inf);
vector<pair<long long, long long>> adj[N];
vector<long long> visited(N, 0), parent(N, -1);
priority_queue<pair<long long, long long>, vector<pair<long long, long long>>,
               greater<pair<long long, long long>>>
    mpq;
void dijkstra(int start) {
  dist[start] = 0;
  mpq.push(make_pair(0, start));
  while (!mpq.empty()) {
    pair<long long, long long> x = mpq.top();
    mpq.pop();
    long long cur_dist = x.first, ver = x.second;
    if (!visited[ver]) {
      visited[ver] = 1;
      for (auto &u : adj[ver]) {
        if (!visited[u.first] && u.second < dist[u.first]) {
          dist[u.first] = u.second;
          parent[u.first] = ver;
          mpq.push(make_pair(dist[u.first], u.first));
        }
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  vector<pair<long long, long long>> v(N);
  for (int i = 1; i <= n; ++i) {
    long long a, b;
    cin >> a >> b;
    v[i] = {a, b};
  }
  vector<long long> v2(N);
  for (int i = 1; i <= n; ++i) cin >> v2[i];
  vector<long long> v3(N);
  for (int i = 1; i <= n; ++i) cin >> v3[i];
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (i == j) continue;
      long long ct =
          (abs(v[i].first - v[j].first) + abs(v[i].second - v[j].second)) *
          (v3[i] + v3[j]);
      adj[i].push_back({j, ct});
      adj[j].push_back({i, ct});
    }
  }
  for (int i = 1; i <= n; ++i) {
    adj[i].push_back({0, v2[i]});
    adj[0].push_back({i, v2[i]});
  }
  dijkstra(0);
  long long sum = 0;
  vector<int> ans;
  vector<pair<int, int>> ans2;
  for (int i = 1; i <= n; ++i) {
    if (parent[i] == 0)
      ans.push_back(i);
    else {
      int a = parent[i];
      ans2.push_back({max(a, i), min(a, i)});
    }
    sum += dist[i];
  }
  cout << sum << endl;
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); ++i) {
    cout << ans[i] << " ";
  }
  cout << endl;
  cout << ans2.size() << endl;
  for (auto u : ans2) {
    cout << u.first << " " << u.second << endl;
  }
  return 0;
}
