#include <bits/stdc++.h>
using namespace std;
vector<int>col[100010],pos[50010],pre;
int dif[100010];
int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B){
for(int i = 0; i < M; i++){
for(int &c:B[i])col[c].push_back(i);
}
for(int i = 0; i < N; i++){
if(col[C[i]].empty())return -1;
}
for(int i = 0; i < N; i++){
for(int &j:col[C[i]]){
pos[(j%M-i%M+M)%M].push_back(i);
}
}
if(N<M)return -1;
for(int d = 0; d < M; d++){
auto &v=pos[d];
if(v.empty())continue;
int sz=v.size(),idx=0;
while(idx<sz){
int s=v[idx++],e=s;
while(idx<sz&&v[idx]==e+1){
e=v[idx++];
}
if(e-s+1>=M){
int yl=s,yh=e-M+1;
if(yl<=N-M&&yh>=0){
yl=max(yl,0);
yh=min(yh,N-M);
if(yl<=yh){
dif[yl]++;
dif[yh+1]--;
}
}
}
}
}
int sum=0;
for(int i = 0; i < N-M+1; i++){
sum+=dif[i];
if(sum>0)pre.push_back(i);
}
if(pre.empty())return -1;
int cur=0,p=0,ans=0;
while(cur<N){
int b=-1;
while(p<pre.size()&&pre[p]<=cur){
b=max(b,pre[p++]+M-1);
}
if(b<cur)return -1;
ans++;
cur=b+1;
}
return ans;
}