def main(): import sys input = sys.stdin.read().split() idx = 0 n = int(input[idx]) idx += 1 X = int(input[idx]) idx += 1 a = list(map(int, input[idx:idx+n])) # Precompute cumulative sums from left and right S_left = [0] * (n + 1) for i in range(n): S_left[i+1] = S_left[i] + a[i] S_right = [0] * (n + 1) for i in range(n-1, -1, -1): S_right[i] = S_right[i+1] + a[i] # Initialize DP table dp = [[False] * n for _ in range(n)] # Function to find maximum k from left def find_max_k_left(l, r): left = 1 right = r - l + 1 max_k = 0 while left <= right: mid = (left + right) // 2 if l + mid > n: right = mid - 1 continue current_sum = S_left[l + mid] - S_left[l] if current_sum <= X: max_k = mid left = mid + 1 else: right = mid - 1 return max_k # Function to find maximum k from right def find_max_k_right(l, r): left = 1 right = r - l + 1 max_k = 0 while left <= right: mid = (left + right) // 2 if (r - mid + 1) < 0: right = mid - 1 continue current_sum = S_right[r - mid + 1] - S_right[r + 1] if current_sum <= X: max_k = mid left = mid + 1 else: right = mid - 1 return max_k # Fill DP table by interval length for length in range(n): for l in range(n - length): r = l + length # Check left max_k_left = find_max_k_left(l, r) if max_k_left > 0: new_l = l + max_k_left new_r = r if new_l <= new_r: if not dp[new_l][new_r]: dp[l][r] = True # Check right max_k_right = find_max_k_right(l, r) if max_k_right > 0: new_l = l new_r = r - max_k_right if new_l <= new_r: if not dp[new_l][new_r]: dp[l][r] = True print("A" if dp[0][n-1] else "B") if __name__ == "__main__": main()