/*
TASK: MUSIS
LANG: C
*/

#include <stdio.h>

#define PRIESAS         -1
#define NEAPLANKYTA     1000000

    const int ejimai[8][2] = { { 1, 2 }, { 2, 1 }, { -1, -2 }, { -2, -1 },
                               {-1, 2 }, { 2,-1 }, { -2,  1 }, {  1, -2 } };
                               
    typedef struct pos {
        int r, c;
    } pos;

    int lentos[100][100][100];
    int karalius[100][100];
    int M, R, P;
    pos Rait[100];
    pos Kar;
    int suma[100][100] = {0};
    int MIN = 1000000000;

void read_data(void)
{
    int i, j, k, r, c;
    FILE *f = fopen("MUSIS.DAT", "r");
    fscanf(f, "%d %d %d\n", &M, &R, &P);

    for (k = 0; k < R; k++)
        for (j = 0; j < M; j++)
            for (i = 0; i < M; i++)
                lentos[k][j][i] = NEAPLANKYTA;
        
        for (j = 0; j < M; j++)
            for (i = 0; i < M; i++)
                karalius[j][i] = NEAPLANKYTA;

    fscanf(f, "%d %d\n", &Kar.r, &Kar.c);
    Kar.r--; Kar.c--;
    for (i = 0; i < R; i++) {
        fscanf(f, "%d %d\n", &Rait[i].r, &Rait[i].c);
        Rait[i].r--; Rait[i].c--;
    }
    
    for (i = 0; i < P; i++) {
        fscanf(f, "%d %d\n", &r, &c);
        r--; c--;
        for (k = 0; k < R; k++) 
            lentos[k][r][c] = PRIESAS;
        karalius[r][c] = PRIESAS;
    }

    fclose(f);
}

void write_data(void)
{
    FILE *f = fopen("MUSIS.REZ", "w");
    if (R == 0)
        fprintf(f, "0\n");
    else if (MIN >= NEAPLANKYTA)  
        fprintf(f, "-1\n");
    else
        fprintf(f, "%d\n", MIN);
    fclose(f);
}

    int priklauso(pos p)
    {
        return (p.c >= 0) && (p.c < M) && (p.r >= 0) && (p.r < M);
    }
    
    /* eiles realizacija */
    pos QUEUE[10010];
    int Q;
    
    void empty(void)
    {
        Q = 0;
    }

    void add(pos p)
    {
        QUEUE[Q++] = p;
    }
    /* ... */

void baltijos_banga(int lenta[100][100], pos prad)
{
    int q, k, i, j;
    pos p, t;
    
    empty();
    add(prad);
    
    lenta[prad.r][prad.c] = 0;
    
    for (q = 0; q < Q; q++) {
        p = QUEUE[q];
        for (k = 0; k < 8; k++) {
            t.r = p.r + ejimai[k][0];
            t.c = p.c + ejimai[k][1];
            if (priklauso(t)) 
                if (lenta[t.r][t.c] == NEAPLANKYTA) {
                    lenta[t.r][t.c] = lenta[p.r][p.c] + 1;    
                    add(t);
                }
        }   
    }
}

int main(void)
{
    int k, j, i;
    int min;
    
    read_data();
    baltijos_banga(karalius, Kar);
    
    for (k = 0; k < R; k++)
        baltijos_banga(lentos[k], Rait[k]);


    /* sumavimas */        
        for (j = 0; j < M; j++)
            for (i = 0; i < M; i++)
                suma[j][i] = karalius[j][i];
            
    for (k = 0; k < R; k++)
        for (j = 0; j < M; j++)
            for (i = 0; i < M; i++)
                suma[j][i] += lentos[k][j][i];
    
    /* skaiciavimas */
    for (j = 0; j < M; j++)
        for (i = 0; i < M; i++)
            if (karalius[j][i] != PRIESAS)
                for (k = 0; k < R; k++) {
                    min = suma[j][i] - lentos[k][j][i] + 
                            karalius[Rait[k].r][Rait[k].c];
                    if (min < MIN)
                        MIN = min;
                }
            
    write_data();    
    
    return 0;
}
