#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

struct Interval {
    int x, y;
};

vector <int> z;
vector <int> :: iterator it, jt;
Interval I [1011];
int st [1003];

class MyComp {
public :
    bool operator () (const Interval &A, const Interval &B) {
        return A.y < B.y;
    }
};

int main () {
    int d, n, m, x, y, u = 0, kx, ky, i, kkx, kky;

    //freopen ("date.in", "r", stdin);

    scanf ("%d%d%d", &d, &n, &m);
    for (i = 1; i <= n; i ++) {
        scanf ("%d", &x);
        z.push_back (x);
    }
    sort (z.begin (), z.end ());
    for (i = 1; i <= m; i ++) {
        scanf ("%d%d", &x, &y);
        it = lower_bound (z.begin (), z.end (), x);
        jt = lower_bound (z.begin (), z.end (), y);
        if ((*jt) != y)
            jt --;
        if (it <= jt && it >= z.begin () && it < z.end () && jt >= z.begin () && jt < z.end ()) {
            I [++ u].x = it - z.begin ();
            I [u].y = jt - z.begin ();
        }
    }
    sort (I + 1, I + 1 + u, MyComp ());
    st [0] = 0;
    st [++ st [0]] = 1;

    for (i = 2; i <= u; i ++) {
        kx = I [st [st [0]]].x;
        ky = I [st [st [0]]].y;
        if (kx <= I [i].x && I [i].y <= ky)
            continue;
        while (st [0]) {
            if (I [i].x <= kx && ky <= I [i].y) {
                -- st [0];
                kx = I [st [st [0]]].x;
                ky = I [st [st [0]]].y;
            }

            else
                if (st [0] >= 2) {
                    kkx = I [st [st [0] - 1]].x;
                    kky = I [st [st [0] - 1]].y;
                    if (I [i].x <= kky) {
                        st [0] --;
                        kx = I [st [st [0]]].x;
                        ky = I [st [st [0]]].y;
                    }
                    else break;
                }
                else break;
        }
        st [++ st [0]] = i;
    }

    printf ("%d\n", st [0]);
    return 0;
}