#include <bits/stdc++.h>
using namespace std;
void solve();
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  int t = 1;
  while (t--) solve();
  return 0;
}
const long long N = 2005;
long long n, p[N], sz[N], x[N], y[N], c[N], k[N];
long long ans;
pair<long long, long long> mn[N];
long long get(long long v) { return p[v] == v ? v : p[v] = get(p[v]); }
void merge(long long a, long long b) {
  a = get(a);
  b = get(b);
  if (a == b) return;
  if (sz[a] < sz[b]) swap(a, b);
  mn[a] = min(mn[a], mn[b]);
  sz[a] += sz[b];
  p[b] = a;
}
void solve() {
  cin >> n;
  for (long long i = 1; i <= n; ++i) cin >> x[i] >> y[i];
  for (long long i = 1; i <= n; ++i) cin >> c[i], ans += c[i];
  for (long long i = 1; i <= n; ++i) cin >> k[i];
  for (long long i = 1; i <= n; ++i) {
    p[i] = i;
    sz[i] = 1;
    ;
    mn[i] = {c[i], i};
  }
  vector<pair<long long, pair<long long, long long>>> v;
  for (long long i = 1; i <= n; ++i) {
    for (long long j = 1; j < i; ++j) {
      v.push_back({(long long)(abs(x[i] - x[j]) + abs(y[i] - y[j])) *
                       (long long)(k[i] + k[j]),
                   {i, j}});
    }
  }
  sort(v.begin(), v.end());
  vector<pair<long long, long long>> gg;
  for (auto d : v) {
    if (get(d.second.first) == get(d.second.second)) continue;
    long long add =
        d.first +
        min(mn[get(d.second.first)].first, mn[get(d.second.second)].first) -
        (mn[get(d.second.first)].first + mn[get(d.second.second)].first);
    if (add < 0) {
      ans += add;
      merge(d.second.first, d.second.second);
      gg.push_back({d.second.first, d.second.second});
    }
  }
  cout << ans << '\n';
  vector<long long> out;
  for (long long i = 1; i <= n; ++i) {
    if (get(i) == i) {
      out.push_back(mn[i].second);
    }
  }
  cout << (long long)out.size() << '\n';
  for (auto d : out) cout << d << ' ';
  cout << '\n';
  cout << (long long)gg.size() << '\n';
  for (auto d : gg) cout << d.first << ' ' << d.second << '\n';
}
