package main
import (
"bufio"
"fmt"
"os"
)
func readInt(reader *bufio.Reader) int {
var n int
var c byte
for {
c, _ = reader.ReadByte()
if c >= '0' && c <= '9' {
break
}
}
for {
n = n*10 + int(c-'0')
c, _ = reader.ReadByte()
if c < '0' || c > '9' {
break
}
}
return n
}
func main() {
reader := bufio.NewReaderSize(os.Stdin, 65536)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
t := readInt(reader)
freq := make([]int, 1000005)
visited := make([]int, 1000005)
for testId := 1; testId <= t; testId++ {
n := readInt(reader)
readInt(reader)
d := readInt(reader)
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = readInt(reader)
}
unique := 0
for i := 0; i < d; i++ {
x := a[i]
if visited[x] != testId {
visited[x] = testId
freq[x] = 0
}
if freq[x] == 0 {
unique++
}
freq[x]++
}
minUnique := unique
for i := d; i < n; i++ {
xToRemove := a[i-d]
freq[xToRemove]--
if freq[xToRemove] == 0 {
unique--
}
xToAdd := a[i]
if visited[xToAdd] != testId {
visited[xToAdd] = testId
freq[xToAdd] = 0
}
if freq[xToAdd] == 0 {
unique++
}
freq[xToAdd]++
if unique < minUnique {
minUnique = unique
}
}
fmt.Fprintln(writer, minUnique)
}
}