#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
#include <list>
#include <stack>
#include <map>
#include <unordered_map>
#include <set>
#include <climits>
#include <functional>
using namespace std;
#define PR(x) cout << #x " = " << x << "\n";
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> ii;
#define sz(a) int((a).size())
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define REP(i,n) for( int i =0 ; i < n ; i++ )
int n,m,c;
int v[100005];
int calcmiss(int cache_size){
list<int> l;
unordered_map<int, list<int>::iterator > mp;
if(cache_size ==0 ){
return m;
}
int cost = 0;
for (int i = 0; i < m; ++i)
{
if(l.size() < cache_size){
// simply push (first find whether its aldready there or not) and update
auto it = mp.find(v[i]);
if(it != mp.end()){
// already there in the cache
auto list_it = it->second;
l.erase(list_it);
l.push_front(v[i]);
mp[v[i]] = l.begin();
}else{
//not there in the cache simply insert it
l.push_front(v[i]);
mp[v[i]] = l.begin();
cost++;
}
}else{
auto it = mp.find(v[i]);
if(it != mp.end()){
// its there in the cache
auto list_it = it->second;
l.erase(list_it);
l.push_front(v[i]);
mp[v[i]] = l.begin();
}else{
//remove and insert
auto list_it = l.end();
list_it--;
mp.erase(*list_it);
l.pop_back();
l.push_front(v[i]);
mp[v[i]] = l.begin();
cost++;
}
}
}
return cost;
}
int main(){
std::ios_base::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
cin>>n>>m>>c;
int s=0, e=n;
for (int i = 0; i < m; ++i)
{
cin>>v[i];
}
int steps = log2(n) + 1;
while(s<e && steps!=0){
int mid = (s+e)/2;
int miss = calcmiss(mid);
if(miss>c){
s = mid + 1;
}else{
e = mid;
}
steps -- ;
}
if(calcmiss(s) <= c){
cout<<s<<endl;
}else{
cout<<-1<<endl;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIFBSKHgpIGNvdXQgPDwgI3ggIiA9ICIgPDwgeCA8PCAiXG4iOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOyAKdHlwZWRlZiB2ZWN0b3I8dmk+IHZ2aTsgCnR5cGVkZWYgcGFpcjxpbnQsaW50PiBpaTsgCiNkZWZpbmUgc3ooYSkgaW50KChhKS5zaXplKCkpIAojZGVmaW5lIHBiIHB1c2hfYmFjayAKI2RlZmluZSBhbGwoYykgKGMpLmJlZ2luKCksKGMpLmVuZCgpIAojZGVmaW5lIHRyKGMsaSkgZm9yKHR5cGVvZigoYykuYmVnaW4oKSBpID0gKGMpLmJlZ2luKCk7IGkgIT0gKGMpLmVuZCgpOyBpKyspIAojZGVmaW5lIHByZXNlbnQoYyx4KSAoKGMpLmZpbmQoeCkgIT0gKGMpLmVuZCgpKSAKI2RlZmluZSBjcHJlc2VudChjLHgpIChmaW5kKGFsbChjKSx4KSAhPSAoYykuZW5kKCkpIAojZGVmaW5lIFJFUChpLG4pIGZvciggaW50IGkgPTAgOyBpIDwgbiA7IGkrKyApCmludCBuLG0sYzsKaW50IHZbMTAwMDA1XTsKCmludCBjYWxjbWlzcyhpbnQgY2FjaGVfc2l6ZSl7CglsaXN0PGludD4gbDsKCXVub3JkZXJlZF9tYXA8aW50LCBsaXN0PGludD46Oml0ZXJhdG9yID4gbXA7CgoJaWYoY2FjaGVfc2l6ZSA9PTAgKXsKCQlyZXR1cm4gbTsKCX0KCQoJaW50IGNvc3QgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpCgl7CgkJaWYobC5zaXplKCkgPCBjYWNoZV9zaXplKXsKCQkJLy8gc2ltcGx5IHB1c2ggKGZpcnN0IGZpbmQgd2hldGhlciBpdHMgYWxkcmVhZHkgdGhlcmUgb3Igbm90KSBhbmQgdXBkYXRlCgkJCWF1dG8gaXQgPSBtcC5maW5kKHZbaV0pOwoJCQlpZihpdCAhPSBtcC5lbmQoKSl7CgkJCQkvLyBhbHJlYWR5IHRoZXJlIGluIHRoZSBjYWNoZQoJCQkJYXV0byBsaXN0X2l0ID0gaXQtPnNlY29uZDsKCQkJCWwuZXJhc2UobGlzdF9pdCk7CgkJCQlsLnB1c2hfZnJvbnQodltpXSk7CgkJCQltcFt2W2ldXSA9IGwuYmVnaW4oKTsKCgkJCX1lbHNlewoJCQkJLy9ub3QgdGhlcmUgaW4gdGhlIGNhY2hlIHNpbXBseSBpbnNlcnQgaXQKCQkJCWwucHVzaF9mcm9udCh2W2ldKTsKCQkJCW1wW3ZbaV1dID0gbC5iZWdpbigpOwoJCQkJY29zdCsrOwoJCQl9CgkJfWVsc2V7CgoJCQlhdXRvIGl0ID0gbXAuZmluZCh2W2ldKTsKCgkJCWlmKGl0ICE9IG1wLmVuZCgpKXsKCQkJCS8vIGl0cyB0aGVyZSBpbiB0aGUgY2FjaGUKCQkJCWF1dG8gbGlzdF9pdCA9IGl0LT5zZWNvbmQ7CgkJCQlsLmVyYXNlKGxpc3RfaXQpOwoJCQkJbC5wdXNoX2Zyb250KHZbaV0pOwoJCQkJbXBbdltpXV0gPSBsLmJlZ2luKCk7CgkJCX1lbHNlewoJCQkJLy9yZW1vdmUgYW5kIGluc2VydAoJCQkJYXV0byBsaXN0X2l0ID0gbC5lbmQoKTsKCQkJCWxpc3RfaXQtLTsKCQkJCW1wLmVyYXNlKCpsaXN0X2l0KTsKCQkJCWwucG9wX2JhY2soKTsKCQkJCWwucHVzaF9mcm9udCh2W2ldKTsKCQkJCW1wW3ZbaV1dID0gbC5iZWdpbigpOwoJCQkJY29zdCsrOwoJCQl9CgkJfQoJfQoJcmV0dXJuIGNvc3Q7Cn0KCmludCBtYWluKCl7CglzdGQ6Omlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJaW50IHQ7IAoJY2luPj50OwoJCgl3aGlsZSh0LS0pewoJCWNpbj4+bj4+bT4+YzsKCQlpbnQgcz0wLCBlPW47CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpCgkJewoJCQljaW4+PnZbaV07CgkJfQoJCQoJCWludCBzdGVwcyA9IGxvZzIobikgKyAxOwoJCXdoaWxlKHM8ZSAmJiBzdGVwcyE9MCl7CgkJCWludCBtaWQgPSAocytlKS8yOwoJCQlpbnQgbWlzcyA9IGNhbGNtaXNzKG1pZCk7CgkJCWlmKG1pc3M+Yyl7CgkJCQlzID0gbWlkICsgMTsKCQkJfWVsc2V7CgkJCQllID0gbWlkOwoJCQl9CgkJCXN0ZXBzIC0tIDsKCQl9CgoJCWlmKGNhbGNtaXNzKHMpIDw9IGMpewoJCQljb3V0PDxzPDxlbmRsOwoJCX1lbHNlewoJCQljb3V0PDwtMTw8ZW5kbDsKCQl9CgoJfQp9