#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
int D, n, m;
vector <int> E[1010];
bool sick[1010];
int best[1010], v[1010];

int main()
{
    int i, j, k, x, st, dr;
    vector <int>::iterator it;
    std::ios_base::sync_with_stdio(false);
    cin >> D >> n >> m;
    for(i = 1; i <= n; ++i)
    {
        cin >> v[i];
        sick[v[i]] = true;
    }
    sort(v + 1, v + n + 1);
    for(i = 1; i <= m; ++i)
    {
        cin >> st >> dr;
        E[st].push_back(dr);
    }
    best[0] = 0;
    for(i = 1; i <= D + 1; ++i)
        best[i] = 1000000000;
    for(i = 0; i <= D; ++i)
    {
        if(best[i] == 1000000000)
            continue;
        j = upper_bound(v + 1, v + n + 1, i) - v;
        if(j > n)
            continue;
        for(k = i + 1; k <= v[j] ; ++k)
        {
            for(it = E[k].begin(); it != E[k].end(); ++it)
            {
                if(*it >= v[j])
                    best[*it] = min(best[*it], best[i] + 1);
            }
        }
    }
    for(i = v[n]; i <= D; ++i)
        best[D + 1] = min(best[D + 1], best[i]);
    cout << best[D + 1] << "\n";
    return 0;
}