// RandomUsername (Nikola Jovanovic) // MindCoding Round 2 // B #include #define DBG false #define debug(x) if(DBG) printf("(ln %d) %s = %d\n", __LINE__, #x, x); #define lld long long #define ff(i,a,b) for(int i=a; i<=b; i++) #define fb(i,a,b) for(int i=a; i>=b; i--) #define par pair #define fi first #define se second #define mid (l+r)/2 #define INF 1000000000 #define MAXN 100005 using namespace std; int L, R; vector begs[1005]; int n, m; int DP[1005]; bool is[1005]; int b[1005]; int d; int main() { scanf("%d %d %d", &d, &n, &m); ff(i, 1, n) { scanf("%d", &b[i]); is[ b[i] ] = true; } ff(i, 1, m) { scanf("%d %d", &L, &R); begs[R].push_back(L); } DP[0] = 0; ff(i, 1, d) { int sz = (int)begs[i].size(); int B = INF; ff(j, 0, sz-1) { int beg = begs[i][j]; bool CONT = true; fb(k, i, beg) { if(is[k]) { CONT = false; break; } } if(CONT) continue; fb(k, beg-1, 0) { B = min(B, DP[k]); if(is[k]) break; } } DP[i] = B + 1; } int ret = INF; ff(i, b[n], d) ret = min(ret, DP[i]); printf("%d\n", ret); return 0; }