```go
package main
import (
"fmt"
)
const MOD int64 = 1000000007
func main() {
var a, b, k, t int
fmt.Scan(&a, &b, &k, &t)
d := b - a
maxSum := k * t
size := 2*maxSum + 1
offset := maxSum
ways := make([]int64, size)
ways[offset] = 1
for turn := 0; turn < t; turn++ {
newWays := make([]int64, size)
prefix := make([]int64, size+1)
for i := 0; i < size; i++ {
prefix[i+1] = (prefix[i] + ways[i]) % MOD
}
for s := 0; s < size; s++ {
lo := s - k
if lo < 0 {
lo = 0
}
hi := s + k
if hi >= size {
hi = size - 1
}
newWays[s] = (prefix[hi+1] - prefix[lo] + MOD) % MOD
}
ways = newWays
}
prefix := make([]int64, size+1)
for i := 0; i < size; i++ {
prefix[i+1] = (prefix[i] + ways[i]) % MOD
}
var ans int64 = 0
for i := 0; i < size; i++ {
M := i - offset
maxL := M - d - 1
if maxL < -maxSum {
continue
}
maxLIndex := maxL + offset
if maxLIndex >= size {
maxLIndex = size - 1
}
count := prefix[maxLIndex+1]
ans = (ans + ways[i]*count) % MOD
}
fmt.Println(ans)
}
```