For problem statement at 0-999/900-999/950-959/958/problemC2.txt this is a correct solution, but verifier at 0-999/900-999/950-959/958/verifierC2.go ends with All 154 tests passed can you fix the verifier? ```go
package main
import (
"fmt"
"io"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) {
c := data[idx]
if c > ' ' {
break
}
idx++
}
sign := 1
if data[idx] == '-' {
sign = -1
idx++
}
val := 0
for idx < len(data) {
c := data[idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int(c-'0')
idx++
}
return val * sign
}
n := nextInt()
k := nextInt()
p := nextInt()
prefix := make([]int, n+1)
cur := 0
for i := 1; i <= n; i++ {
a := nextInt()
cur += a % p
cur %= p
prefix[i] = cur
}
const negInf int64 = -1 << 60
dpPrev := make([]int64, n+1)
dpCurr := make([]int64, n+1)
for i := 1; i <= n; i++ {
dpPrev[i] = negInf
}
dpPrev[0] = 0
bestByResidue := make([]int64, p)
for part := 1; part <= k; part++ {
for i := 0; i <= n; i++ {
dpCurr[i] = negInf
}
for r := 0; r < p; r++ {
bestByResidue[r] = negInf
}
for i := 1; i <= n; i++ {
t := i - 1
if dpPrev[t] > negInf/2 {
r := prefix[t]
v := dpPrev[t] - int64(r)
if v > bestByResidue[r] {
bestByResidue[r] = v
}
}
pr := prefix[i]
best := negInf
for r := 0; r <= pr; r++ {
if bestByResidue[r] > best {
best = bestByResidue[r]
}
}
for r := pr + 1; r < p; r++ {
v := bestByResidue[r] + int64(p)
if v > best {
best = v
}
}
if best > negInf/2 {
dpCurr[i] = int64(pr) + best
}
}
dpPrev, dpCurr = dpCurr, dpPrev
}
fmt.Print(dpPrev[n])
}
```