#define _CRT_SECURE_NO_WARNINGS
#include "paint.h"
#include <iostream>
#include <map>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <bitset>
#include <string>
#include <cstring>
#include <algorithm>
#include <random>
#include <chrono>
#include <math.h>
#include <cmath>
#include <iomanip>
#include <cassert>
using namespace std;
#define ll long long
#define fr first
#define sc second
#define pb push_back
const int N = 200005;
const ll oo = 1000000000000000, MOD = 1000000007;
int minimumInstructions(int n, int m, int k, vector<int> C,vector<int> A,
vector<vector<int>> B) {
vector<vector<bool>> ok(m + 2);
for (int i = 0; i < m; ++i) {
ok[i].resize(k + 4);
for (int num : B[i]) {
ok[i][num] = 1;
}
}
vector<int> hnaravor_vec;
for (int i = 0; i <= n-m; ++i) {
for (int start = 0; start < m; ++start) {
bool fl = 1;
for (int j = 0; j < m; ++j) {
int ashxatoxi_hamar = (start + j) % m;
int pati_hamar = (i + j);
if (ok[ashxatoxi_hamar][C[pati_hamar]] == 0) {
fl = 0;
break;
}
}
if (fl) {
hnaravor_vec.pb(i);
break;
}
}
}
if (hnaravor_vec.size() == 0) {
return -1;
}
if (hnaravor_vec[0] != 0 || hnaravor_vec.back() != n - m) {
return -1;
}
int l = 1, r = m;
int cnt = 1;
for (int i = 1; i < hnaravor_vec.size(); ++i) {
if (hnaravor_vec[i] > r) {
return -1;
}
if (i == hnaravor_vec.size() - 1) {
++cnt;
break;
}
if (hnaravor_vec[i + 1] > r) {
++cnt;
l = hnaravor_vec[i] + 1;
r = l + m - 1;
}
}
return cnt;
}