#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define pb push_back
#define ff first
#define ss second

struct punkt{
    ll x, y; int ind;
};

vector<punkt> v;

ll xs, xm, ys, ym;
ll X, Y;
int mode, t;

ll policz(ll x1, ll x2, ll y1, ll y2){
    return x1 * y2 - y1 * x2;
}

bool cmp(const punkt &a, const punkt &b) {
    ll ax = a.x - X;
    ll ay = a.y - Y;
    ll bx = b.x - X;
    ll by = b.y - Y;

    ll wek = policz(ax, ay, bx, by);

    if(t == 1) wek = -wek;
    if(wek != 0) return wek > 0;

    ll da = ax * ax + ay * ay;
    ll db = bx * bx + by * by;

    if(mode == 0) return da < db;
    else return da > db;
}

bool cmp2(int a, int b){
    return cmp(v[a], v[b]);
}

const int N = 128 * 1024;
ll tree[2 * N];

void upd(int v){
    v += N;
    while(v){
        tree[v]++;
        v >>= 1;
    }
}

int query(int r){
    int l = N;
    r += N;
    ll wyn = 0;
    while(l <= r){
        if(l & 1) wyn += tree[l++];
        if(!(r & 1)) wyn += tree[r--];
        l >>= 1;
        r >>= 1;
    }
    return wyn;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> xs >> ys >> xm >> ym;

    ll dx = xm - xs, dy = ym - ys;

    int n;
    cin >> n;
    punkt p[n];

    ll cntl = 0, cntp = 0;
    vector<punkt> pkt[2];

    for(int i = 0; i < n; i++){
        ll x, y;
        cin >> x >> y;
        p[i] = {x, y, i};

        ll nx = x - xs, ny = y - ys;
        ll w = policz(dx, nx, dy, ny);

        if(w > 0){
            pkt[0].pb(p[i]);
        }
        else if(w == 0){
            ll d = nx * dx + ny * dy;
            ll dl = dx * dx + dy * dy;

            if(d < 0) cntl++;
            else if(d > dl) cntp++;
        }
        else{
            pkt[1].pb(p[i]);
        }
    }

    ll wyn = cntp * (cntp - 1) / 2 + cntl * (cntl - 1) / 2;

    for(t = 0; t < 2; t++){
        v = pkt[t];
        int m = v.size();

        if(m <= 1) continue;

        X = xs;
        Y = ys;
        mode = 0;
        sort(v.begin(), v.end(), cmp);

        X = xm;
        Y = ym;

        mode = 1;
        vi kol(m);
        iota(kol.begin(), kol.end(), 0);
        sort(kol.begin(), kol.end(), cmp2);

        vi poz(m);
        for(int i = 0; i < m; i++) poz[kol[i]] = i;

        for(int i = 0; i < m; i++){
            wyn += i - query(poz[i]);
            upd(poz[i]);
        }

        for(int i = 0; i < 2 * N; i++) tree[i] = 0;
    }

    cout << wyn << "\n";


    return 0;
}
