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