/* */ //#pragma comment(linker, "/STACK:16777216") #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define norm asdfasdgasdgsd #define eps 1e-9 #define M_PI 3.141592653589793 #define bs 1000000007 #define bsize 512 const int SZ = 10000; using namespace std; int D, N, M; vector v[SZ]; int dp[SZ]; int skip[SZ]; int main(){ //freopen("route.in","r",stdin); //freopen("route.out","w",stdout); //freopen("F:/in.txt", "r", stdin); //freopen("F:/output.txt", "w", stdout); ios_base::sync_with_stdio(0); //cin.tie(0); cin >> D >> N >> M; for (int i = 1; i <= N; i++) { int val; cin >> val; skip[val] = 1; } for (int i = 1; i <= D; i++) { skip[i] += skip[i - 1]; } for (int i = 1; i <= M; i++) { int a, b; cin >> a >> b; //if (skip[b] - skip[a - 1] == b - a) //{ v[a].push_back(b); //} } for (int i = 0; i <= D; i++) { dp[i] = 1e9; } dp[0] = 0; for (int i = 0; i <= D; i++) { if (skip[i + 1] == skip[i]) dp[i + 1] = min(dp[i + 1], dp[i]); for (int j = 0; j < v[i + 1].size(); j++) { int to = v[i + 1][j]; dp[to] = min(dp[to], dp[i] + 1); } } cout << dp[D] << endl; cin.get(); cin.get(); return 0; }