#include<bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
pair<int,int> a[10000];
int d[20000];
int k[20000];
int32_t main(){
  int n;
  cin>>n;
  for(int x,y,i=0;i<n;i++){
     cin>>x>>y;
     a[i].f=x;
     a[i].s=y;
  }
  for(int i=0;i<n;i++){
    int x;cin>>x;
    d[i]=x;
  }
  for(int i=0;i<n;i++){
    int y; cin>>y;
    k[i]=y;
  }
  priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > pq;
  int c[10000]={0};
  for(int i=0;i<n;i++) c[i]=i;
  for(int i=0;i<n;i++){
    pq.push({d[i],i});
  }
  int ct[20000];
  while(!pq.empty()){
     pair<int,int> p=pq.top();
     for(int i=0;i<n;i++){
       if(i==p.s || i==c[p.s]) continue;
       int dist=abs(a[i].f-a[p.s].f)+abs(a[i].s-a[p.s].s);
       if(d[i]>((k[p.s]+k[i])*dist) ){
         d[i]=((k[p.s]+k[i])*dist);
         pq.push({d[i],i});
         c[i]=c[p.s];
         ct[i]=p.s;
       }
     }
     pq.pop();
  }
  int ans=0;
  for(int i=0;i<n;i++){
    ans+=d[i];
  }
  cout<<ans<<"\n";
  int ps=0,con=0;
  vector<int> v;
  vector<pair<int,int> > edge;
  for(int i=0;i<n;i++){
    if(c[i]==i){
      ps++;
      v.push_back(i+1);
    }
    else {
      con++;
      edge.push_back({i,ct[i]});
    }
  }
  cout<<ps<<"\n";
  for(int i=0;i<v.size();i++){
    cout<<v[i]<<" ";
  }
  cout<<"\n";
  cout<<con<<"\n";
  for(int i=0;i<edge.size();i++){
    cout<<edge[i].f+1<<" "<<edge[i].s+1<<"\n";
  }
}