#include<bits/stdc++.h>
using namespace std;
stack <int> Stack;
int N,M,K,flag = 1,Count = 1,x;
/* N:长度
M:栈的最大容量
K:判断次数*/
int main(){
cin >> N >> M >> K; // 读入N、M、K
while(K--){
flag = 1; // 初始化判断栈是否溢出
Count = 1; // 初始化出栈序列首元素
Stack =stack <int> (); // 初始化栈
for(int j = 0; j < N; j++){
cin >> x; // 按顺序读入栈
if(x == Count) Count++; // 如果刚刚读入的数据,恰好等于count,则直接让出栈序列+1,无需入栈
else Stack.push(x); // 入栈
if(Stack.size() > M) flag = 0; // 判断栈是否溢出
while(1){
if(!Stack.empty() && Stack.top() == Count){
Stack.pop(); // 如果栈顶元素等于出栈序列元素,则栈顶元素出栈,且序列+1
Count++;
}else break;
}
}
if(Stack.empty() && flag) cout << "YES" << endl;
else cout << "NO" << endl; // 判断栈最终是否为空,且过程中是否溢出,输出结果
}
}