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