package main
import (
"fmt"
"io"
"os"
)
func gcd(a, b uint32) uint32 {
for b != 0 {
a, b = b, a%b
}
return a
}
func readUint32(b []byte, idx int) (uint32, int) {
var res uint32
for idx < len(b) && (b[idx] < '0' || b[idx] > '9') {
idx++
}
for idx < len(b) && b[idx] >= '0' && b[idx] <= '9' {
res = res*10 + uint32(b[idx]-'0')
idx++
}
return res, idx
}
func main() {
b, _ := io.ReadAll(os.Stdin)
var n, p, q uint32
idx := 0
n, idx = readUint32(b, idx)
p, idx = readUint32(b, idx)
q, idx = readUint32(b, idx)
k := p
if n-1 < k {
k = n - 1
}
C := make([]uint32, k+1)
C[0] = 1
for j := uint32(1); j <= k; j++ {
num := make([]uint32, j)
for m := uint32(0); m < j; m++ {
num[m] = n - m
}
for m := uint32(1); m <= j; m++ {
div := m
for x := uint32(0); x < j && div > 1; x++ {
g := gcd(num[x], div)
num[x] /= g
div /= g
}
}
var res uint32 = 1
for x := uint32(0); x < j; x++ {
res *= num[x]
}
C[j] = res
}
var ans uint32
for i := uint32(1); i <= q; i++ {
Ri := C[k]
for j := int(k) - 1; j >= 0; j-- {
Ri = Ri*i + C[j]
}
ans ^= Ri * i
}
fmt.Println(ans)
}