← Home
package main

import (
	"fmt"
	"sort"
)

func main() {
	var n, k int
	if _, err := fmt.Scan(&n, &k); err != nil {
		return
	}
	a := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Scan(&a[i])
	}
	var q int
	fmt.Scan(&q)

	c := n / k
	used := make([]bool, n+1)
	minAvg := 1e9
	maxAvg := -1e9

	seenCards := make(map[string]bool)

	for i := 0; i < q; i++ {
		card := make([]int, c)
		sum := 0
		for j := 0; j < c; j++ {
			fmt.Scan(&card[j])
			sum += a[card[j]]
		}
		sort.Ints(card)
		key := fmt.Sprintf("%v", card)
		if !seenCards[key] {
			seenCards[key] = true
			for j := 0; j < c; j++ {
				used[card[j]] = true
			}
		}
		avg := float64(sum) / float64(c)
		if avg < minAvg {
			minAvg = avg
		}
		if avg > maxAvg {
			maxAvg = avg
		}
	}

	d := len(seenCards)
	if d < k {
		unused := make([]int, 0)
		for i := 1; i <= n; i++ {
			if !used[i] {
				unused = append(unused, a[i])
			}
		}
		sort.Ints(unused)
		if len(unused) >= c {
			sumMin := 0
			sumMax := 0
			for i := 0; i < c; i++ {
				sumMin += unused[i]
				sumMax += unused[len(unused)-1-i]
			}
			avgMin := float64(sumMin) / float64(c)
			avgMax := float64(sumMax) / float64(c)
			if avgMin < minAvg {
				minAvg = avgMin
			}
			if avgMax > maxAvg {
				maxAvg = avgMax
			}
		}
	}

	fmt.Printf("%.10f %.10f\n", minAvg, maxAvg)
}