← Home
 ```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024), 1024*1024)
	
	scanner.Scan()
	t, _ := strconv.Atoi(strings.TrimSpace(scanner.Text()))
	
	for i := 0; i < t; i++ {
		scanner.Scan()
		nc := strings.Fields(scanner.Text())
		n, _ := strconv.Atoi(nc[0])
		c, _ := strconv.ParseInt(nc[1], 10, 64)
		
		scanner.Scan()
		sStr := strings.Fields(scanner.Text())
		s := make([]int, n)
		for j := 0; j < n; j++ {
			val, _ := strconv.Atoi(sStr[j])
			s[j] = val
		}
		
		lo := int64(1)
		hi := int64(2000000000)
		
		for lo <= hi {
			mid := (lo + hi) / 2
			curr := calc(s, mid, c)
			if curr == c {
				fmt.Println(mid)
				break
			} else if curr < c {
				lo = mid + 1
			} else {
				hi = mid - 1
			}
		}
	}
}

func calc(s []int, w, c int64) int64 {
	var sum int64 = 0
	twoW := 2 * w
	const maxSide int64 = 3037000499
	
	for _, val := range s {
		side := int64(val) + twoW
		if side > maxSide {
			return c + 1
		}
		area := side * side
		if sum > c-area {
			return c + 1
		}
		sum += area
	}
	return sum
}
```