/*
TASK:area
LANG:C++
*/

#include <cstdio>
//#include <conio.h>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

#define eps         ((double)(1e-8))
#define EQ(a,b)     ( fabs((a)-(b)) < eps )

struct point {
    double x,y;
    point(){}
    point(double a,double b):x(a),y(b) {}
};

typedef vector<point> poly;

double X1,Y1,X2,Y2;
double a1,b1,c1,a2,b2,c2;
poly P;
point T;
int N;

point inter;

inline double cross(point p,point p1,point p2)
{
    double a1=p1.x-p.x;
    double a2=p1.y-p.y;     
    double b1=p2.x-p.x;
    double b2=p2.y-p.y;
//    printf("cross: %lf %lf %lf %lf\n",a1,a2,b1,b2);
    return a1*b2 - a2*b1;
}

inline double deter(double a,double b,double c,double d)
{
    return (a*d)-(b*c);
}

char doesInt(point p1,point p2)
{
    double x1p,y1p,x2p,y2p;
    double dxp,dyp;
    
    dxp=X2-X1;
    dyp=Y2-Y1;
    for (x2p=X2; fabs(x2p)<=10000; x2p+=dxp);
    for (x1p=X1; fabs(x1p)<=10000; x1p-=dxp);
    for (y2p=Y2; fabs(y2p)<=10000; y2p+=dyp);
    for (y1p=Y1; fabs(y1p)<=10000; y1p-=dyp);
    
//    printf("%lf %lf %lf %lf\n",x1p,y1p,x2p,y2p);
    
    double d1=cross( point(x1p,y1p), point(x2p,y2p), p1);
    double d2=cross( point(x1p,y1p), point(x2p,y2p), p2);
    
    //printf("%lf %lf\n",d1,d2);
    //printf("%lf %lf %lf %lf\n", p1.x,p1.y, p2.x,p2.y);
    
    if ((d1<0 && d2>0) || (d1>0 && d2<0)) {
        // opr presechnata tochka
        double d,d1,d2;
        
        a2=p2.y-p1.y;
        b2=-(p2.x-p1.x);
        c2=-(a2*p1.x + b2*p1.y);
        
        d= deter(a1,b1,a2,b2);
        d1=deter(-c1,b1, -c2,b2);
        d2=deter(a1,-c1, a2,-c2);
        
        inter.x=(d1)/(d+eps);
        inter.y=(d2)/(d+eps);
        
        //printf("inetr calc %lf %lf (d=%lf)\n",inter.x, inter.y, d);
        
        return 1;
    }
    return 0;
}

char isIn(poly p)
{
    int n=P.size(); 
    int i,i1;
    
    for (i=0;i<n;++i) {
        i1=(i+1)%n;
        double d1=cross(p[i],p[i1], T);
        if (d1<=0) return 0;
    }
    return 1;
}

double getS()
{
    double S=0;
    for (int i=1;i<P.size()-1; ++i) {
        int j=i+1;
        S+=cross(P[0],P[i],P[j]);
    }
    return S;
}

poly getPoly()
{
    poly p1,p2;
    
    int n=P.size();
    int i,i1;
    
/*    for (i=0;i<n;++i) {
        i1=(i+1)%n;
        //printf("check\n");
        
        if (doesInt(P[i],P[i1])) {
            printf("OK\n",1);
            printf("inter: %lf %lf\n",inter.x,inter.y);
        }
        else {
            printf("no\n");
        }
    }*/
    
    char flag=0;
    int i2=0;
    for (i=0;i<n;++i) {
        i1=(i+1)%n;
       
        if (doesInt(P[i],P[i1])) {
            if (flag==0) {
                flag=1;
                p1.push_back(inter);
            }
            else {
                i2=i;
                p1.push_back(P[i]);
                p1.push_back(inter);
                break;
            }
        }
        else {
            if (flag) {
                p1.push_back( P[i] );
            }
        }
    }

    //printf("ok\n");

    //if (p1==P) return P;
    int k;
    if (P.size() == p1.size()) {
        for (k=0;k<P.size();++k) if (p1[k].x!=P[k].x || p1[k].y!=P[k].y) break;
         if (k<P.size()) return P;
    }
    if (p1.size()==0) return P;
    
    flag=0;

    for (;i2<2*n;++i2) {
        i=i2%n;
        i1=(i+1)%n;
       
        if (doesInt(P[i],P[i1])) {
            if (flag==0) {
                flag=1;
                p2.push_back(inter);
            }
            else {
                p2.push_back(P[i]);
                p2.push_back(inter);
                break;
            }
        }
        else {
            if (flag) {
                p1.push_back( P[i] );
            }
        }
    }
    
    /*
    for (int i=0;i<p1.size();++i)
        printf("p1: %lf %lf\n",p1[i].x,p1[i].y);

    for (int i=0;i<p2.size();++i)
        printf("p2: %lf %lf\n",p2[i].x,p2[i].y);
    */
    
    if (isIn(p1)) return p1;
    else return p2;

    
    return poly();
}

int main()
{
    //freopen("a4.in","r",stdin);
       
    scanf("%lf%lf%lf%lf",&X1,&Y1,&X2,&Y2);
    P.push_back( point(X1,Y1) );
    P.push_back( point(X2,Y1) );
    P.push_back( point(X2,Y2) );
    P.push_back( point(X1,Y2) );
    scanf("%lf%lf",&T.x, &T.y);
    
    scanf("%d",&N);
    
    for (int i=0;i<1;++i) {
        scanf("%lf%lf%lf%lf",&X1,&Y1,&X2,&Y2);
        a1=Y2-Y1;
        b1=-(X2-X1);
        c1=-(a1*X1 + b1*Y1);
        
        //printf("a,b,c: %lf %lf %lf\n",a1,b1,c1);
        
        P=getPoly();
    }
    
    double r=floor( getS()/2 );
    printf("%.0lf", r);
    
    //getch();
    return 0;
}
