← Home
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)
	}
}