#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
struct reader {
  template <typename Type>
  reader& operator>>(register Type& ret) {
    register int f = 1;
    ret = 0;
    register char ch = getchar();
    for (; !isdigit(ch); ch = getchar())
      if (ch == '-') f = -f;
    for (; isdigit(ch); ch = getchar())
      ret = (ret << 1) + (ret << 3) + (ch - '0');
    ret *= f;
    return *this;
  }
} fin;
int N, bd;
long long K[maxn];
long long X[maxn];
long long Y[maxn];
long long las[maxn];
long long res;
long long dis[maxn];
bool vis[maxn];
int main() {
  fin >> N;
  for (register int i = 1; i <= N; i++) fin >> X[i] >> Y[i];
  for (register int i = 1; i <= N; i++) fin >> dis[i];
  for (register int i = 1; i <= N; i++) fin >> K[i], las[i] = 0;
  for (register int t = 1; t <= N; t++) {
    register int minn = 2147483640, id;
    for (register int i = 1; i <= N; i++)
      if (!vis[i] && dis[i] < minn) minn = dis[i], id = i;
    vis[id] = true;
    res += minn;
    if (las[id] == 0) bd++;
    for (register int i = 1; i <= N; i++)
      if (!vis[i] &&
          dis[i] > (K[i] + K[id]) * (abs(X[id] - X[i]) + abs(Y[id] - Y[i])))
        dis[i] = (K[i] + K[id]) * (abs(X[id] - X[i]) + abs(Y[id] - Y[i])),
        las[i] = id;
  }
  printf("%lld\n%d\n", res, bd);
  for (register int i = 1; i <= N; i++)
    if (las[i] == 0) printf("%d ", i);
  printf("\n%d\n", N - bd);
  for (register int i = 1; i <= N; i++)
    if (las[i] != 0) printf("%lld %d\n", las[i], i);
  return 0;
}
