// 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()
{
    int woop = 0;
    scanf("%d %d %d", &d, &n, &m);
    ff(i, 1, n)
    {
        scanf("%d", &b[i]);
        woop = max(woop, 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)
    {
        DP[i] = INF;

        // end on i
        int sz = (int)begs[i].size();
        int B = INF;
        ff(j, 0, sz-1)
        {
            // use [beg, i]?
            int beg = begs[i][j];

            // it has to cover at least 1 IS day
            bool CONT = true;
            fb(k, i, beg)
            {
                if(is[k])
                {
                    CONT = false;
                    break;
                }
            }
            // it doesn't, we can't use it
            if(CONT) continue;

            // no overlaps, the last one ends on [0..beg-1]
            fb(k, beg-1, 0)
            {
                B = min(B, DP[k]);
                if(is[k]) break;
            }
        }
        DP[i] = min(DP[i], B + 1);
    }
    int ret = INF;
    ff(i, woop, d)
        ret = min(ret, DP[i]);
    printf("%d\n", ret);
    return 0;
}