#include using namespace std; #define int long long #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; typedef vector> vvi; typedef vector> vpii; template using vec = vector; template using uset = unordered_set; template using umap = unordered_map; const int MAX_T = 100000 + 10; struct Event { int t; bool end; int endT; bool operator < (Event other) const { return tie(t, end) > tie(other.t, other.end); } }; void solve() { int N, C, Q; cin >> N >> C >> Q; vpii people(N); for (auto & [s, e] : people) cin >> s >> e; vi meetings(C); for (auto & m : meetings) cin >> m; vpii moves(Q); for (auto & [from, to] : moves) cin >> from >> to; vector starts(N, {0, false, 0}); rep(i, 0, N) { starts[i].t = people[i].first; starts[i].endT = people[i].second; } priority_queue q(all(starts)); starts.clear(); vi timeline (MAX_T); rep(t, 0, MAX_T) { timeline[t] = t==0 ? 0 : timeline[t-1]; while (!q.empty() && q.top().t == t) { auto [_, end, endT] = q.top(); q.pop(); if (end) { timeline[t]--; } else { timeline[t]++; q.push({ endT + 1, true, -1 }); } } } int avail = 0; for (auto t : meetings) avail += timeline[t]; cout << (N * C) - avail << "\n"; for (auto [from, to] : moves) { avail -= timeline[from]; avail += timeline[to]; cout << (N*C) - avail << "\n"; } } signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); ll T = 1; // cin >> T; rep(i, 0, T) solve(); }