from math import gcd def inverse(n, d, MOD): return n * pow(d, -1, MOD) % MOD def func(now, diff, cnt): if diff == 0: if now%M == 0: return cnt else: return 0 if diff < 0: diff = -diff else: now = (M-now)%M GCD = gcd(M, diff) if now%GCD != 0: return 0 n = now//GCD m = M//GCD d = diff//GCD c = inverse(n, d, m) if cnt <= c: return 0 else: return (cnt-c-1)//m+1 N, K, M = map(int, input().split()) B = list(map(int, input().split())) C = list(map(int, input().split())) ln, lc = 0, 0 rn, rc = -1, 0 cnt = 0 SUM = 0 for i in range(N): if K <= cnt+B[i]: diff = K-cnt SUM += C[i]*diff rn, rc = i, diff-1 break else: SUM += C[i]*B[i] cnt += B[i] rn, rc = i, B[i]-1 ans = 0 while rn < N: cnt1, cnt2 = B[ln]-lc, B[rn]-rc if cnt1 < cnt2: ans += func(SUM, C[rn]-C[ln], cnt1) SUM += (C[rn]-C[ln])*cnt1 ln += 1 lc = 0 rc += cnt1 elif cnt1 > cnt2: ans += func(SUM, C[rn]-C[ln], cnt2) SUM += (C[rn]-C[ln])*cnt2 lc += cnt2 rn += 1 rc = 0 else: ans += func(SUM, C[rn]-C[ln], cnt1) SUM += (C[rn]-C[ln])*cnt1 ln += 1 lc = 0 rn += 1 rc = 0 print(ans)