← Home
```go
package main

import (
	"fmt"
)

func main() {
	var a, b, c, l int64
	fmt.Scan(&a, &b, &c, &l)
	
	total := (l + 1) * (l + 2) * (l + 3) / 6
	bad1 := calc(c-a-b, l)
	bad2 := calc(b-a-c, l)
	bad3 := calc(a-b-c, l)
	
	fmt.Println(total - bad1 - bad2 - bad3)
}

func calc(k, l int64) int64 {
	if k < -l {
		return 0
	}
	if k >= l {
		return (l + 1) * (l + 2) * (l + 3) / 6
	}
	
	M := k
	if l < M {
		M = l
	}
	S1 := (l+1)*sum1(M) - sum2(M)
	
	A := k + 1
	if A < 0 {
		A = 0
	}
	B := (l + k + 1) / 2
	if l < B {
		B = l
	}
	if A > B {
		return S1
	}
	
	C := l + k + 1
	S2 := C*(sum1(B)-sum1(A-1)) - 2*(sum2(B)-sum2(A-1))
	
	return S1 + S2
}

func sum1(n int64) int64 {
	if n < 0 {
		return 0
	}
	return (n + 1) * (n + 2) / 2
}

func sum2(n int64) int64 {
	if n < 0 {
		return 0
	}
	return n * (n + 1) * (n + 2) / 3
}
```