#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
long long maxn = 1e14;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
long long min(long long a, long long b) { return a < b ? a : b; }
int n;
map<long long, long long> ma;
deque<vector<long long>> que;
vector<long long> tower;
vector<long long> conn;
vector<vector<long long>> fin;
bool sortbyc(const vector<long long>& a, const vector<long long>& b) {
  return a[3] < b[3];
}
int minDis(int x1, int y1, int x2, int y2) {
  return (abs(x1 - x2) + abs(y1 - y2));
}
void solve() {
  vector<long long> vec = que.front();
  que.pop_front();
  fin.push_back(vec);
  int size = que.size();
  while (size--) {
    vector<long long> temp = que.front();
    int save = temp[3];
    que.pop_front();
    temp[3] = min(temp[3], (vec[4] + temp[4]) *
                               (minDis(vec[0], vec[1], temp[0], temp[1])));
    if (temp[3] != save) {
      ma[temp[2]] = vec[2];
    }
    que.push_back(temp);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  cin >> n;
  vector<pair<long long, long long>> points;
  for (int i = 0; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    points.push_back(make_pair(x, y));
  }
  for (int i = 0; i < n; i++) {
    long long a;
    cin >> a;
    tower.push_back(a);
  }
  for (int i = 0; i < n; i++) {
    long long a;
    cin >> a;
    conn.push_back(a);
  }
  vector<vector<long long>> vec;
  for (int i = 0; i < n; i++) {
    vector<long long> ci;
    ci.push_back(points[i].first);
    ci.push_back(points[i].second);
    ci.push_back(i + 1);
    ci.push_back(tower[i]);
    ci.push_back(conn[i]);
    que.push_back(ci);
  }
  for (int i = 0; i < n; i++) {
    vector<vector<long long>> vec;
    while (que.size() != 0) {
      vec.push_back(que.front());
      que.pop_front();
    }
    sort(vec.begin(), vec.end(), sortbyc);
    for (int i = 0; i < vec.size(); i++) {
      que.push_back(vec[i]);
    }
    solve();
  }
  vector<pair<int, int>> anspair;
  vector<int> tower;
  long long cost = 0;
  for (int i = 0; i < fin.size(); i++) {
    vector<long long> v = fin[i];
    cost += v[3];
    if (ma[v[2]] == 0) {
      tower.push_back(v[2]);
    } else {
      anspair.push_back(make_pair(ma[v[2]], v[2]));
    }
  }
  cout << cost << "\n" << tower.size() << "\n";
  for (int i = 0; i < tower.size(); i++) {
    cout << tower[i] << " ";
  }
  if (tower.size() != 0) cout << "\n";
  cout << anspair.size() << "\n";
  for (int i = 0; i < anspair.size(); i++) {
    cout << anspair[i].first << " " << anspair[i].second << "\n";
  }
}
