#include <bits/stdc++.h>
#include "paint.h"
using namespace std;
const int inf = 1e6;
int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) {
set<int> pos[K], workers[K];
for(int i = 0; i < M; ++i){
for(int j = 0; j < A[i]; ++j){
pos[B[i][j]].insert(i);
}
}
for(int i = 0; i < N; ++i){
for(auto v : pos[C[i]]) workers[v].insert(i + 1);
if((int) pos[C[i]].size() == 0) return -1;
}
vector<int> dp(N + 5, inf);
dp[0] = 0;
auto fine_shyt = [&](int starting) -> bool {
for(auto st_id : pos[C[starting]]){
bool ok = 1;
for(int i = starting; i < starting + M - 1; ++i){
int cur = ((st_id + i - starting) % M);
if(workers[cur].find(i) == workers[cur].end()){
ok = 0;
break;
}
}
if(ok) return 1;
}
return 0;
};
for(int i = 1; i <= N; ++i){
if(i >= M && fine_shyt(i - M + 1)){
for(int j = i - M + 1; j <= i; ++j){
dp[j] = min(dp[j], dp[i - M] + 1);
}
}
}
return (dp[N] >= inf ? -1 : dp[N]);
}