// RandomUsername (Nikola Jovanovic)
// MindCoding Round 2
// B

#include <bits/stdc++.h>
#define DBG false
#define debug(x) if(DBG) printf("(ln %d) %s = %d\n", __LINE__, #x, x);
#define lld long long
#define ff(i,a,b) for(int i=a; i<=b; i++)
#define fb(i,a,b) for(int i=a; i>=b; i--)
#define par pair<int, int>
#define fi first
#define se second
#define mid (l+r)/2
#define INF 1000000000
#define MAXN 100005

using namespace std;

int L, R;
vector<int> begs[1005];
int n, m;
int DP[1005];
bool is[1005];
int b[1005];
int d;

int main()
{
    scanf("%d %d %d", &d, &n, &m);
    ff(i, 1, n)
    {
        scanf("%d", &b[i]);
        is[ b[i] ] = true;
    }
    ff(i, 1, m)
    {
        scanf("%d %d", &L, &R);
        begs[R].push_back(L);
    }
    DP[0] = 0;
    ff(i, 1, d)
    {
        int sz = (int)begs[i].size();
        int B = INF;
        ff(j, 0, sz-1)
        {
            int beg = begs[i][j];
            fb(k, beg-1, 0)
            {
                B = min(B, DP[k]);
                if(is[k]) break;
            }
        }
        DP[i] = B + 1;
    }
    int ret = INF;
    ff(i, b[n], d)
        ret = min(ret, DP[i]);
    printf("%d\n", ret);
    return 0;
}