#include <bits/stdc++.h>
using namespace std;
int A[1010][1010],ro[2][1010][1010],n,DP[2][1010],O[6][2];
int X[]={0,-1,0,1},Y[]={-1,0,1,0};
ifstream fin("ai.in");
ofstream fout("ai.out");
bool ad(int x,int y,int vy,int vx){
return (x!=1 || vx<n) && (y!=1 || vy<n) && (y!=-1 || vy>1) && (x!=-1 || vx>1);
}
int Lee(int r, int s){
queue <pair<int,int> > q;
pair <int,int> p;
r+=2;
s+=1;
p.first=O[r][0];
p.second=O[r][1];
while(!q.empty())q.pop();
q.push(p);
if(r==3)
while(!q.empty()){
if((q.front().first==O[s][0] && q.front().second==O[s][1])||(((q.front().first>O[0][0] && q.front().second>O[0][1] && q.front().first<=O[s][0] && q.front().second<=O[s][1]) ||
(q.front().first<O[0][0] && q.front().second<O[0][1] && q.front().first>=O[s][0] && q.front().second>=O[s][1])) && abs(q.front().first-O[s][0])==abs(q.front().second-O[s][1]) && abs(q.front().first-O[0][0])==abs(q.front().second-O[0][1]) && abs(O[0][0]-O[s][0])==abs(O[0][1]-O[s][1]))){
int x=q.front().second,y=q.front().first,ind=ro[r%2][q.front().first][q.front().second];
while(ind){
ro[r%2][y][x]=-ind;
if(y>1 && ro[r%2][y-1][x]==ind-1){
y--;
}else if(x>1 && ro[r%2][y][x-1]==ind-1){
x--;
} else if(y<n && ro[r%2][y+1][x]==ind-1){
y++;
}else if(x<n && ro[r%2][y][x+1]==ind-1){
x++;
}
ind--;
}
return -ro[r%2][q.front().first][q.front().second];
}
for(int i=0;i<4;i++){
if(ad(X[i],Y[i],q.front().first,q.front().second))
if(!ro[r%2][q.front().first+Y[i]][q.front().second+X[i]] && (!A[q.front().first+Y[i]][q.front().second+X[i]] || A[q.front().first+Y[i]][q.front().second+X[i]]<=-3)){
q.push({q.front().first+Y[i],q.front().second+X[i]});
ro[r%2][q.front().first+Y[i]][q.front().second+X[i]]=ro[r%2][q.front().first][q.front().second]+1;
}
}
q.pop();
}else while(!q.empty()){
if((q.front().first==O[s][0] && q.front().second==O[s][1]) || (((q.front().first>O[0][0] && q.front().second>O[0][1] && q.front().first<=O[s][0] && q.front().second<=O[s][1]) || (q.front().first<O[0][0] && q.front().second<O[0][1] && q.front().first>=O[s][0] && q.front().second>=O[s][1]))
&& abs(q.front().first-O[s][0])==abs(q.front().second-O[s][1]) && abs(q.front().first-O[0][0])==abs(q.front().second-O[0][1]) && abs(O[0][0]-O[s][0])==abs(O[0][1]-O[s][1]))){
return ro[r%2][q.front().first][q.front().second];
}
for(int i=0;i<4;i++){
if(ad(X[i],Y[i],q.front().first,q.front().second) && ro[r%2][q.front().first][q.front().second]+1!=-ro[(r+1)%2][q.front().first+Y[i]][q.front().second+X[i]])
if(!ro[r%2][q.front().first+Y[i]][q.front().second+X[i]] && (!A[q.front().first+Y[i]][q.front().second+X[i]] || A[q.front().first+Y[i]][q.front().second+X[i]]<=-3)){
q.push({q.front().first+Y[i],q.front().second+X[i]});
ro[r%2][q.front().first+Y[i]][q.front().second+X[i]]=ro[r%2][q.front().first][q.front().second]+1;
}
}
q.pop();
}
return -1;
}
int main(){
memset(A,0,sizeof A);
memset(DP,0,sizeof DP);
fin>>n;
int y,x;
fin>>y>>x;
A[y][x]=-2;//tinta
O[0][0]=y;
O[0][1]=x;
fin>>y>>x;
A[y][x]=-3;//Sursa 1
O[1][0]=y;
O[1][1]=x;
fin>>y>>x;
A[y][x]=-3;//Sursa 2
O[2][0]=y;
O[2][1]=x;
fin>>y>>x;
A[y][x]=-4;//Robotul 1
O[3][0]=y;
O[3][1]=x;
fin>>y>>x;
A[y][x]=-4;//Robotul 2
O[4][0]=y;
O[4][1]=x;
int k;
fin>>k;
for(int i=0;i<k;i++){
fin>>y>>x;
A[y][x]=-1;//Obstacole
}
int l=0,lc;
for(int i=1;i<=n;i++){
lc=0;
memset(DP[i%2],0,sizeof DP[i%2]);
for(int j=1;j<=n;j++){
if(A[i][j]==-1){
lc++;
DP[i%2][j]=DP[(i+1)%2][j]+1;
}else{
l=max(lc,l);
lc=0;
}
l=max(DP[i%2][j],l);
}
l=max(lc,l);
}
fout<<l<<'\n';
memset(ro,0,sizeof ro);
int s=0,s1,s2;
s1=Lee(1,0);
s2=Lee(2,1);
if(s1==-1 || s2==-1) s=-1;
else s=max(s1,s2);
memset(ro,0,sizeof ro);
s1=Lee(1,1);
s2=Lee(2,0);
int sc;
if(s1==-1 || s2==-1)sc=-1;
else sc=max(s1,s2);
if(s>sc && sc!=-1) s=sc;
fout<<s;
return 0;
}