/*
TASK:area
LANG:C++
*/
#include <stdio.h>
#include <vector>
#include <algorithm>
#define MP make_pair
#define PB push_back
#define xx first
#define yy second
#define MIN(ta, tb) (((ta)<(tb))?(ta):(tb))
#define MAX(ta, tb) (((ta)>(tb))?(ta):(tb))
#define ABS(ta) (((ta)<0)?(-(ta)):(ta))

using namespace std;

	vector<pair<double, double> > l(128), l1, l2;
  pair<double, double> T, p[2];
  int num, num2, N, i, k, j;
  double k1, n1, k2, n2, px, py, minx, maxx, miny, maxy, sign, dett;//, at1, at2;

void split();
double det(double x1, double y1, double x2, double y2, double x3, double y3);
void sortl();

void print();

int main () {
  scanf("%lf%lf%lf%lf", &l[0].xx, &l[0].yy, &l[2].xx, &l[2].yy);
  l[1].xx=l[2].xx; l[1].yy=l[0].yy;
  l[3].xx=l[0].xx; l[3].yy=l[2].yy;
  num=num2=4;
//print();
  scanf("%lf%lf", &T.xx, &T.yy);
  scanf("%d", &N);
  for(i=0; i<N; i+=1) {
  	scanf("%lf%lf%lf%lf", &p[0].xx, &p[0].yy, &p[1].xx,  &p[1].yy);
    split();
  }
  dett=0;
  for(k=0; k<num-1; k+=1) dett+=det(0, 0, l[k].xx, l[k].yy, l[k-1].xx, l[k-1].yy);
  k=num; dett+=det(0, 0, l[k].xx, l[k].yy, l[0].xx, l[0].yy);
  printf("%.0lf\n", ((dett<0)?(-dett):(dett))/2);
	return 0;
}
void split() {
		num2=num;
		if(p[0].xx!=p[1].xx) k2=double(p[0].yy-p[1].yy)/(p[0].xx-p[1].xx);
    n2=p[0].yy-k2*p[0].xx;
	sortl();
	for(k=0; k<num-1; k+=1) {
	  if(l[k].xx!=l[k+1].xx) {
    	k1=double(l[k].yy-l[k+1].yy)/(l[k].xx-l[k+1].xx);
	    n1=l[k].yy-k1*l[k].xx;
	    px=(n2-n1)/(k1-k2);
  	  py=k2*px+n2;
    }
    else {
	    px=l[k].xx;
  	  py=k2*px+n2;
    }
    minx=MIN(l[k].xx, l[k+1].xx);
    maxx=MAX(l[k].xx, l[k+1].xx);
    miny=MIN(l[k].yy, l[k+1].yy);
    maxy=MAX(l[k].yy, l[k+1].yy);
		if(px>=minx && px<=maxx && py>=miny && py<=maxy) {
      l[num2].xx=px;
      l[num2].yy=py;
      num2+=1;
    }
  }
  	k=num-1;
	  if(l[k].xx!=l[0].xx) {
    	k1=double(l[k].yy-l[0].yy)/(l[k].xx-l[0].xx);
	    n1=l[k].yy-k1*l[k].xx;
	    px=(n2-n1)/(k1-k2);
  	  py=k2*px+n2;
    }
    else {
	    px=l[k].xx;
  	  py=k2*px+n2;
    }
    minx=MIN(l[k].xx, l[0].xx);
    maxx=MAX(l[k].xx, l[0].xx);
    miny=MIN(l[k].yy, l[0].yy);
    maxy=MAX(l[k].yy, l[0].yy);
		if(px>=minx && px<=maxx && py>=miny && py<=maxy) {
      l[num2].xx=px;
      l[num2].yy=py;
      num2+=1;
    }
print();
    sign=det(p[0].xx, p[0].yy, p[1].xx, p[1].yy, T.xx, T.yy);
    sign=sign/ABS(sign);
  for(k=0; k<num; k+=1) {
  	dett=det(p[0].xx, p[0].yy, p[1].xx, p[1].yy, l[k].xx, l[k].yy);
  	if(sign*dett < 0) {
      l.erase(l.begin()+k);
      num2-=1;
      k-=1;
      num-=1;
    }
  }
  num=num2;
  sortl();
print();
	return;
}

double det(double x1, double y1, double x2, double y2, double x3, double y3) {
	return x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2);
}

void print() {
	int q;
  printf("l:");
  for(q=0; q<num2; q+=1) {
  	printf("(%.0lf,%.0lf)",l[q].xx, l[q].yy);
  }
  printf("\n");
  system("PAUSE");
	return;
}

void sortl() {
	l1.clear();
  l2.clear();
  for(k=0; k<num-1; k+=1) {
  	miny=MIN(l[k].yy, l[k+1].yy);
    maxy=MAX(l[k].yy, l[k+1].yy);
  }
  miny=miny+(maxy-miny)/2;

  for(k=0; k<num; k+=1) {
  	if(l[k].yy<miny) l1.PB(l[k]);
    else l2.PB(l[k]);
  }
  sort(l1.begin(), l1.end());
  sort(l2.begin(), l2.end());
  k=0;
  for(j=0; j<l1.end()-l1.begin(); j+=1) {
  	l[k].xx=l1[j].xx;
    l[k].yy=l1[j].yy;
    k+=1;
  }
  for(j=l2.end()-l2.begin()-1; j>=0; j-=1) {
  	l[k].xx=l2[j].xx;
    l[k].yy=l2[j].yy;
    k+=1;
  }
	return;
}

