n, xLB, xRB = map(int, input().split())
enemies = []
for _ in range(n):
    XL, YU, XR, YD = map(int, input().split())
    enemies.append((XL, YU, XR, YD))

# Initialize blocking_yd for each x in the beam's range
beam_length = xRB - xLB + 1
blocking_yd = [-1] * beam_length  # -1 indicates no enemy has covered this x yet

for enemy in enemies:
    XL, YU, XR, YD = enemy
    # Calculate overlap with beam's x range
    overlap_start = max(xLB, XL)
    overlap_end = min(xRB, XR)
    if overlap_start > overlap_end:
        continue  # no overlap
    # Update blocking_yd for each x in the overlap
    for x in range(overlap_start, overlap_end + 1):
        idx = x - xLB
        if YD > blocking_yd[idx]:
            blocking_yd[idx] = YD

# Determine hit status for each enemy
results = []
for enemy in enemies:
    XL, YU, XR, YD = enemy
    overlap_start = max(xLB, XL)
    overlap_end = min(xRB, XR)
    if overlap_start > overlap_end:
        results.append(0)
        continue
    hit = False
    for x in range(overlap_start, overlap_end + 1):
        idx = x - xLB
        if blocking_yd[idx] == YD:
            hit = True
            break
    results.append(1 if hit else 0)

# Output the results
for res in results:
    print(res)