#include <iostream> #include <algorithm> #include <vector> #define INF 1000000 using namespace std; int d,n,m,inc,sf,mmin,a[1004],p1,p2; struct myS{int inc,nr;} aux; vector<myS> v[1004]; int mat[1004][1004]; int main() { cin>>d>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); for(int i=1;i<=m;i++) { cin>>inc>>sf; for(p1=1;p1<=n;p1++) if(a[p1] >= inc) break; for(p2=p1-1;p2<=n;p2++) if(a[p2] >= sf) break; aux.inc = inc; aux.nr = max(p2-p1+1,0); v[sf].push_back(aux); } inc = 1; for(int i=1;i<=n;i++) for(int j=0;j<=d;j++) mat[i][j] = INF; a[n+1] = d+1; for(int i=1;i<=n;i++) { for(int day = a[i];day<a[i+1];day++) { mmin = INF; for(int j=0;j<v[day].size();j++) if(mat[i-v[day][j].nr][v[day][j].inc-1] <= mmin) mmin = mat[i-v[day][j].nr][v[day][j].inc-1]; mmin = mmin + 1 < mat[i][day-1] ? mmin + 1 : mat[i][day-1]; mat[i][day] = mmin; } } cout<<mat[n][d]; return 0; }