#include <iostream> #include <set> #include <algorithm> #include <assert.h> using namespace std; struct interv { int x, y; }; bool cmp(interv A, interv B) { return A.x<B.x; } interv a[1001]; int d, n, m, ds[1001], i, j, sx, sy, seturi; set<int> st[1001], staux, st2,stfin[1001]; set<int>::iterator it, it2, it3; int main() { cin>>d>>n>>m; for(i=1; i<=n; i++) { cin>>ds[i]; } for(i=1; i<=m; i++) { cin>>a[i].x>>a[i].y; } sort(a+1, a+m+1, cmp); for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { if(ds[j]>=a[i].x && ds[j]<=a[i].y) { st[i].insert(ds[j]); } } } for(i=1; i<=m; i++) { staux.clear(); st2.clear(); for(it=st[i].begin(); it!=st[i].end(); it++) { staux.insert((*it)); } st2.insert(i); sx=a[i].x; sy=a[i].y; for(j=i+1; j<=m; j++) { if(sy<a[j].x) { for(it=st[j].begin(); it!=st[j].end(); it++) { staux.insert((*it)); } st2.insert(j); sx=a[j].x; sy=a[j].y; } if(staux.size()==n) { seturi++; stfin[seturi]=st2; } } } int nrinit, minim=99999; for(i=1; i<=seturi; i++) { nrinit=stfin[i].size(); for(it=stfin[i].begin(); it!=stfin[i].end();it++) { //daca e redundant, il scoatem int act=(*it); staux.clear(); for(it2=stfin[i].begin(); it2!=stfin[i].end(); it2++) { int act2=(*it2); if(act2!=act) { for(it3=st[act2].begin(); it3!=st[act2].end(); it3++) { staux.insert((*it3)); } } } if(staux.size()==n) { nrinit--; stfin[i].erase(act); } } if(nrinit<minim) minim=nrinit; } cout<<minim; }