```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
func main() {
sc := bufio.NewScanner(os.Stdin)
sc.Split(bufio.ScanWords)
scanInt := func() int {
sc.Scan()
val, _ := strconv.Atoi(sc.Text())
return val
}
if !sc.Scan() {
return
}
n, _ := strconv.Atoi(sc.Text())
m := scanInt()
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = scanInt()
}
sort.Ints(a)
dp := make([]int64, n+1)
var sum int64
wr := bufio.NewWriter(os.Stdout)
defer wr.Flush()
for k := 1; k <= n; k++ {
sum += int64(a[k-1])
if k <= m {
dp[k] = sum
} else {
dp[k] = dp[k-m] + sum
}
if k > 1 {
wr.WriteByte(' ')
}
fmt.Fprint(wr, dp[k])
}
wr.WriteByte('\n')
}
```