package main
import (
"bufio"
"io"
"os"
"strconv"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) NextInt64() int64 {
for fs.idx < fs.n && fs.data[fs.idx] <= ' ' {
fs.idx++
}
var val int64
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int64(c-'0')
fs.idx++
}
return val
}
func main() {
fs := NewFastScanner()
t := int(fs.NextInt64())
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var ansBuf []byte
for ; t > 0; t-- {
n := int(fs.NextInt64())
m := int(fs.NextInt64())
v := fs.NextInt64()
a := make([]int64, n+1)
ps := make([]int64, n+1)
for i := 1; i <= n; i++ {
a[i] = fs.NextInt64()
ps[i] = ps[i-1] + a[i]
}
left := make([]int, m+1)
right := make([]int, m+1)
left[0] = 0
cnt := 0
var sum int64
for i := 1; i <= n && cnt < m; i++ {
sum += a[i]
if sum >= v {
cnt++
left[cnt] = i
sum = 0
}
}
if cnt < m {
ansBuf = strconv.AppendInt(ansBuf, -1, 10)
ansBuf = append(ansBuf, '\n')
continue
}
right[0] = n + 1
cnt = 0
sum = 0
for i := n; i >= 1 && cnt < m; i-- {
sum += a[i]
if sum >= v {
cnt++
right[cnt] = i
sum = 0
}
}
var ans int64
for k := 0; k <= m; k++ {
l := left[k]
r := right[m-k]
if l < r {
cur := ps[r-1] - ps[l]
if cur > ans {
ans = cur
}
}
}
ansBuf = strconv.AppendInt(ansBuf, ans, 10)
ansBuf = append(ansBuf, '\n')
}
out.Write(ansBuf)
}