← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func max(a, b int64) int64 {
	if a > b {
		return a
	}
	return b
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	for tc := 0; tc < t; tc++ {
		var n, m int
		fmt.Fscan(reader, &n, &m)

		type Interval struct {
			l, r int
		}
		intervals := make([][]int, m+2)

		for i := 0; i < n; i++ {
			var l, r int
			fmt.Fscan(reader, &l, &r)
			intervals[r] = append(intervals[r], l)
		}

		p := make([]int64, m+2)
		for i := 1; i <= m; i++ {
			fmt.Fscan(reader, &p[i])
		}

		dp := make([]int64, m+2)
		V := make([]int64, m+2)

		for i := 1; i <= m; i++ {
			V[i] = dp[i-1]
			for _, l := range intervals[i] {
				for j := l; j <= i; j++ {
					V[j] += p[j]
				}
			}
			maxV := dp[i-1]
			for j := 1; j <= i; j++ {
				if V[j] > maxV {
					maxV = V[j]
				}
			}
			dp[i] = maxV
		}

		fmt.Fprintln(writer, dp[m])
	}
}
```