from collections import deque

def shortest_sum_at_least(nums, k):
    prefix = [0]
    for value in nums:
        prefix.append(prefix[-1] + value)
    candidates = deque()
    best = len(nums) + 1
    for right, total in enumerate(prefix):
        while candidates and total - prefix[candidates[0]] >= k:
            best = min(best, right - candidates.popleft())
        while candidates and prefix[candidates[-1]] >= total:
            candidates.pop()
        candidates.append(right)
    return -1 if best > len(nums) else best
