#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define pb push_back #define mp make_pair #define sortv(a) sort(a.begin(), a.end()) #define FOR(i, start, final) for (int i=start; i<=final; ++i) #define ROF(i, start, final) for (int i=start; i>=final; --i) //#define f cin #define g cout using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair < int, int> pi; typedef vector< int > vi; typedef vector< pair< int, int > > vpi; int N, D, M, a[1005], rez, nr, viz[1005]; vpi v; deque < pi > sol; int main() { f.sync_with_stdio(false); f >> D >> N >> M; nr = N; FOR(i,1,N) f >> a[i]; sort(a + 1, a + N + 1); FOR(i,1,M) { int x, y; f >> x >> y; v.pb(mp(x, y)); } sortv(v); sol.pb(v[0]); FOR(i,1,v.size() - 1) { if (v[i].second < a[1] || v[i].second < sol[sol.size() - 1].second) { continue; } if (v[i].first == sol[sol.size() - 1].first && v[i].second > sol[sol.size() - 1].second) { sol.pop_back(); sol.pb(v[i]); continue; } sol.pb(v[i]); } for (int i = 0; i < (int)sol.size() - 1; ++i) { if (sol[i].second < a[1]) { sol.pop_front(); continue; } if (sol[i].second >= a[1] && sol[i + 1].first <= a[1]) { sol.pop_front(); continue; } } FOR(i,0,sol.size() - 1) { for (int j = 1; j <= N && nr; ++j) { if (a[j] >= sol[i].first && a[j] <= sol[i].second) { viz[i] = 1; a[j] = -1; --nr; } } } FOR(i,0,sol.size() - 1) { rez += viz[i]; } g << rez << '\n'; return 0; }