#include <bits/stdc++.h>
using namespace std;
struct point {
  int i, j;
  point() {}
  point(int i, int j) : i(i), j(j) {}
};
vector<point> shiftar(vector<point> v, int len) {
  int n = int(v.size());
  vector<point> nextv = v;
  for (int i = 0; i < n; i++) nextv[i] = v[(i + len) % n];
  return nextv;
}
vector<pair<int, int> > shiftar(vector<pair<int, int> > v, int len) {
  int n = int(v.size());
  vector<pair<int, int> > nextv = v;
  for (int i = 0; i < n; i++) nextv[i] = v[(i + len) % n];
  return nextv;
}
point leer() {
  point p;
  cin >> p.i >> p.j;
  return p;
}
point p1, p2;
int n;
vector<point> v;
bool dentro(point p) {
  return p1.i < p.i and p.i < p2.i and p1.j < p.j and p.j < p2.j;
}
bool todosdentro() {
  for (int i = 0; i < n; i++)
    if (not dentro(v[i])) return false;
  return true;
}
const int limite = 1000000;
int identificador[limite];
int computaidentificador(int u) {
  int &idu = identificador[u];
  if (idu == 0) return u;
  idu = computaidentificador(idu);
  return idu;
}
int uniones = 0;
void unir(int u, int v) {
  u = computaidentificador(u);
  v = computaidentificador(v);
  if (u == v) return;
  identificador[u] = v;
  uniones++;
}
pair<int, int> lista[4][15001];
int numids = 0;
vector<pair<int, int> > w;
void anyade(pair<int, int> lista[15001]) {
  for (int i = 0; i < 15001; i++)
    if (lista[i].first != -1) w.push_back(lista[i]);
}
void anyaderev(pair<int, int> lista[15001]) {
  reverse(lista, lista + 15001);
  anyade(lista);
}
bool interior(double i, double j) {
  int imax = -1;
  bool esinterior = false;
  for (int k = 0; k < n; k++) {
    point p = v[k];
    point pp = v[(k + 1) % n];
    if (p.i < imax) continue;
    if (i < p.i) continue;
    if (pp.j < j and j < p.j) {
      esinterior = true;
      imax = p.i;
    } else if (p.j < j and j < pp.j) {
      esinterior = false;
      imax = p.i;
    }
  }
  return esinterior;
}
void escribe(point p) { cout << "(" << p.i << "," << p.j << ")" << endl; }
void escribe(string s, point p) {
  cout << s << " ";
  escribe(p);
}
int main() {
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 15001; j++) lista[i][j] = pair<int, int>(-1, -1);
  ios::sync_with_stdio(false);
  p1 = leer();
  p2 = leer();
  swap(p1.j, p2.j);
  cin >> n;
  v = vector<point>(n);
  for (int i = 0; i < n; i++) v[i] = leer();
  if (todosdentro()) {
    cout << 1 << endl;
    exit(0);
  }
  {
    int i = 0;
    while (dentro(v[i])) i++;
    v = shiftar(v, i);
  }
  int id = 0;
  for (int i = 0; i < n; i++) {
    point p = v[i];
    point pp = v[(i + 1) % n];
    if (p1.i < p.i and p.i < p2.i and pp.j < p2.j and p2.j <= p.j) {
      id = ++numids;
      lista[0][p.i] = pair<int, int>(1, id);
    }
    if (p1.i < p.i and p.i < p2.i and pp.j <= p1.j and p1.j < p.j) {
      lista[2][p.i] = pair<int, int>(0, id);
    }
    if (p1.i < p.i and p.i < p2.i and p.j <= p1.j and p1.j < pp.j) {
      id = ++numids;
      lista[2][p.i] = pair<int, int>(1, id);
    }
    if (p1.i < p.i and p.i < p2.i and p.j < p2.j and p2.j <= pp.j) {
      lista[0][p.i] = pair<int, int>(0, id);
    }
    if (p1.j < p.j and p.j < p2.j and p.i <= p1.i and p1.i < pp.i) {
      id = ++numids;
      lista[1][p.j] = pair<int, int>(1, id);
    }
    if (p1.j < p.j and p.j < p2.j and p.i < p2.i and p2.i <= pp.i) {
      lista[3][p.j] = pair<int, int>(0, id);
    }
    if (p1.j < p.j and p.j < p2.j and pp.i < p2.i and p2.i <= p.i) {
      id = ++numids;
      lista[3][p.j] = pair<int, int>(1, id);
    }
    if (p1.j < p.j and p.j < p2.j and pp.i <= p1.i and p1.i < p.i) {
      lista[1][p.j] = pair<int, int>(0, id);
    }
  }
  anyade(lista[0]);
  anyaderev(lista[3]);
  anyaderev(lista[2]);
  anyade(lista[1]);
  {
    vector<pair<int, int> > v = w;
    if (int(v.size()) == 0) {
      if (interior(p1.i + 0.5, p1.j + 0.5))
        cout << 1 << endl;
      else
        cout << 0 << endl;
      exit(0);
    }
    if (v[0].first == 0) v = shiftar(v, 1);
    for (int i = 0; i < int(v.size()); i += 2)
      unir(v[i].second, v[i + 1].second);
    cout << numids - uniones << endl;
  }
}
