#include <bits/stdc++.h>

using namespace std;

struct status{
    int cost,x,y,t;
    status(int cost,int x,int y,int t):
    cost(cost),x(x),y(y),t(t){}
};

queue<status>q;

int ans=-1;
int sx,sy,gx,gy,lx,ly;
int mx[7]={0,1,1,0,-1,-1,0};
int my0[7]={1,0,-1,-1,-1,0,0};
int my1[7]={1,1,0,-1,0,1,0};
bool memo[201][201][6];

void non_cost(status st){
    q.push(st);memo[st.x+100][st.y+100][st.t]=1;
    int tx=st.x,ty=st.y,tt=st.t;
    while(1){
        int f=abs(tx*ty*tt)%6;
        if(tx%2!=0)ty+=my1[f];
        else ty+=my0[f];
        tx+=mx[f];
        (++tt)%=6;
        if(abs(tx)>abs(lx) || abs(ty)>abs(ly))return;
        if(memo[tx+100][ty+100][tt])return;
        q.push(status(st.cost,tx,ty,tt));
        if(tx==gx && ty==gy){
            ans=st.cost;
            break;
        }
        memo[tx+100][ty+100][tt]=1;
    }
}

int main(){
    cin>>sx>>sy>>gx>>gy;
    int n;cin>>n;
    for(int i=0;i<n;++i){
        int x,y;
        cin>>x>>y;
        for(int j=0;j<6;++j)memo[x+100][y+100][j]=1;
    }
    cin>>lx>>ly;
    non_cost(status(0,sx,sy,0));
    if(ans!=-1){
        cout<<ans<<endl;
        return 0;
    }
    while(!q.empty()){
        status nst=q.front();q.pop();
        for(int i=0;i<7;++i){
            //if(abs(nst.x*nst.y*nst.t)%6 == i)continue;
            int tx=nst.x+mx[i],tt=(nst.t+1)%6,ty;
            if(nst.x%2!=0)ty=nst.y+my1[i];
            else ty=nst.y+my0[i];
            if(abs(tx)>abs(lx) || abs(ty)>abs(ly))continue;
            if(!memo[tx+100][ty+100][tt]){
                non_cost(status(nst.cost+1,tx,ty,tt));
                if(tx==gx && ty==gy){
                    ans=nst.cost+1;
                    break;
                }
                if(ans!=-1)break;
            }
        }
        if(ans!=-1)break;
    }
    cout<<ans<<endl;
    return 0;
}