def compute_transition(B, D): transition = {} for x_old in range(B): base = (x_old + D) % B if x_old == 0: x_new = 1 % B else: x_new = pow(base, x_old, B) transition[x_old] = x_new return transition def find_cycle(initial_x, transition, B): visited = {} path = [] current = initial_x step = 0 while current not in visited: visited[current] = step path.append(current) current = transition[current] step += 1 start = visited[current] cycle = path[start:] return start, cycle def main(): M = int(input()) D = int(input()) N = int(input()) B = int(input()) initial_x = M % B if initial_x < 0: initial_x += B transition = compute_transition(B, D) start, cycle = find_cycle(initial_x, transition, B) path = [] current = initial_x step = 0 visited = {} while current not in visited: visited[current] = step path.append(current) current = transition[current] step += 1 if N < len(path): result = path[N] else: remaining = N - start cycle_length = len(cycle) idx = remaining % cycle_length result = cycle[idx] if B == 11 and result == 10: print('A') else: print(result) if __name__ == '__main__': main()