#include #include #include #include #include #include #include #include #include #include #include using namespace std; int INF = 10000, D, M, N, dp[1009], ap[1009]; vector < int > v[1009]; int main() { //sfreopen ("input", "r", stdin); //freopen ("output", "w", stdout); scanf ("%d %d %d", &D, &N, &M); for (int i=1; i<=N; i++) { int x; scanf ("%d", &x), ap[x] = 1; } for (int i=1; i<=M; i++) { int x, y; scanf ("%d %d", &x, &y); v[y].push_back (x - 1); } dp[0] = 0; for (int i=1; i<=D; i++) { if (ap[i] == 0) { dp[i] = dp[i - 1]; for (vector < int > :: iterator it = v[i].begin (); it != v[i].end (); it ++) if (dp[*it] + 1 < dp[i]) dp[i] = dp[*it] + 1; } else { dp[i] = INF; for (vector < int > :: iterator it = v[i].begin (); it != v[i].end (); it ++) if (dp[*it] < dp[i]) dp[i] = dp[*it]; dp[i] ++; } } printf ("%d\n", dp[D]); return 0; }