#include <bits/stdc++.h>
using namespace std;
bitset<15010> v[15010], mask;
int x[15010], y[15010];
int *fcmp;
int cmp_dis(int i, int j) { return fcmp[i] < fcmp[j]; }
int discretize(int a[], int n) {
  static int id[15010];
  int i, j, k;
  for (i = 1; i <= n; i++) id[i] = i;
  fcmp = a;
  sort(id + 1, id + n + 1, cmp_dis);
  i = j = 1;
  while (i <= n) {
    k = a[id[i]];
    while (a[id[i]] == k && i <= n) {
      a[id[i]] = j;
      i++;
    }
    j++;
  }
  return j - 1;
}
void dfs(int x, int y) {
  v[y].reset(x);
  if (x < 15010 && v[y].test(x + 1)) dfs(x + 1, y);
  if (y < 15010 && v[y + 1].test(x)) dfs(x, y + 1);
  if (x > 0 && v[y].test(x - 1)) dfs(x - 1, y);
  if (y > 0 && v[y - 1].test(x)) dfs(x, y - 1);
}
int n, nx, ny;
void output() {
  int i, j;
  for (i = 0; i <= ny; i++) {
    for (j = 0; j <= nx; j++) {
      int xx = v[i][j];
      printf("%d", xx);
    }
    printf("\n");
  }
}
int main() {
  int i, j, k;
  int x1, y1, x2, y2;
  scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", x + i, y + i);
  }
  if (x1 > x2) swap(x1, x2);
  if (y1 > y2) swap(y1, y2);
  x[n + 1] = x1;
  x[n + 2] = x2;
  y[n + 1] = y1;
  y[n + 2] = y2;
  nx = 1 + discretize(x, n + 2);
  ny = 1 + discretize(y, n + 2);
  for (i = 1; i <= n; i++) {
    j = i % n + 1;
    if (y[i] == y[j]) {
      v[y[i]].set(x[i]);
      v[y[j]].set(x[j]);
    }
  }
  for (j = 1; j < ny; j++) {
    bool k = v[j][1];
    for (i = 2; i < nx; i++) {
      k ^= v[j][i];
      v[j][i] = k;
    }
    v[j] ^= v[j - 1];
  }
  for (i = x[n + 1]; i < x[n + 2]; i++) {
    mask.set(i);
  }
  for (j = 1; j < ny; j++) {
    if (j < y[n + 1] || j >= y[n + 2])
      v[j].reset();
    else
      v[j] &= mask;
  }
  int ans = 0;
  for (int j = y[n + 1]; j < y[n + 2]; j++) {
    if (!v[j].any()) {
      continue;
    }
    for (i = x[n + 1]; i < x[n + 2]; i++) {
      if (!v[j].test(i)) continue;
      ++ans;
      dfs(i, j);
    }
  }
  printf("%d", ans);
  return 0;
}
