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