← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func gcd(a, b int64) int64 {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func extGcd(a, b int64) (int64, int64, int64) {
	if b == 0 {
		return a, 1, 0
	}
	g, x1, y1 := extGcd(b, a%b)
	return g, y1, x1 - (a/b)*y1
}

func modInverse(a, m int64) int64 {
	_, x, _ := extGcd(a, m)
	return (x%m + m) % m
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, m int
	var k int64
	fmt.Fscan(reader, &n, &m, &k)

	a := make([]int, n)
	b := make([]int, m)

	posA := make(map[int]int)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
		posA[a[i]] = i
	}

	posB := make(map[int]int)
	for i := 0; i < m; i++ {
		fmt.Fscan(reader, &b[i])
		posB[b[i]] = i
	}

	n64 := int64(n)
	m64 := int64(m)
	g := gcd(n64, m64)
	l := n64 / g * m64

	matchDays := make([]int64, 0)

	for color, indexA := range posA {
		if indexB, ok := posB[color]; ok {
			x := int64(indexA)
			y := int64(indexB)

			if x%g == y%g {
				mod := m64 / g
				rhs := (y - x) / g
				rhs = (rhs%mod + mod) % mod
				inv := modInverse(n64/g, mod)
				kCoeff := (rhs * inv) % mod
				z := x + kCoeff*n64
				matchDays = append(matchDays, z)
			}
		}
	}

	sort.Slice(matchDays, func(i, j int) bool { return matchDays[i] < matchDays[j] })

	countMatches := func(t int64) int64 {
		q := t / l
		r := t % l
		cnt := q * int64(len(matchDays))
		rem := sort.Search(len(matchDays), func(i int) bool {
			return matchDays[i] >= r
		})
		return cnt + int64(rem)
	}

	low := int64(1)
	high := int64(2e18)

	for low < high {
		mid := low + (high-low)/2
		matches := countMatches(mid)
		diff := mid - matches
		if diff >= k {
			high = mid
		} else {
			low = mid + 1
		}
	}

	fmt.Println(low)
}
```