#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Tezkor kiritish-chiqarish
ios::sync_with_stdio(false);
cin.tie(NULL);
int N, K, R;
if (!(cin >> N >> K >> R)) return 0;
vector<int> dna(N);
for (int i = 0; i < N; i++) {
cin >> dna[i]; // DNK satrini o'qish [cite: 16]
}
vector<int> target(K, 0); // Talab qilingan miqdorlar
for (int i = 0; i < R; i++) {
int b, q;
cin >> b >> q;
target[b] = q; // B nukleobaza uchun Q miqdor [cite: 19]
}
vector<int> current_count(K, 0); // Hozirgi oynadagi miqdorlar
int satisfied_count = 0;
int min_length = N + 1;
int left = 0;
for (int right = 0; right < N; right++) {
int base = dna[right];
current_count[base]++;
// Agar bu nukleobaza talab qilingan bo'lsa va miqdori yetarli bo'lsa
if (target[base] > 0 && current_count[base] == target[base]) {
satisfied_count++;
}
// Barcha R ta talab bajarilganda oynani chapdan qisqartiramiz
while (satisfied_count == R) {
min_length = min(min_length, right - left + 1);
int left_base = dna[left];
if (target[left_base] > 0 && current_count[left_base] == target[left_base]) {
satisfied_count--;
}
current_count[left_base]--;
left++;
}
}
// Natijani chiqarish [cite: 22, 23]
if (min_length > N) {
cout << "impossible" << endl;
} else {
cout << min_length << endl;
}
return 0;
}