← Home
```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)
}
```