#include #include #include using namespace std; struct Interval { int x, y; }; vector z; vector :: 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; }