소스코드

import sys
input = sys.stdin.readline

M,N,L = map(int, input().strip().split())
sadaes = list(map(int, input().strip().split()))
sadaes.sort() # 이분탐색 필수 전제 : 정렬된 상태

result = 0 # 잡을 수 있는 동물의 수

def binary_search_is_hunt(a,b):
	start_idx, end_idx = 0, len(sadaes) - 1
	
	# 아예 사정거리 바깥의 높이인 경우 -> 못 잡음
	if b > L:
		return 0
	
	while start_idx <= end_idx:
		mid_idx = (start_idx + end_idx) // 2
		
		# 사정거리 안쪽인 경우
		if (abs(sadaes[mid_idx] - a) + b) <= L:
			return 1
		else:
			# a 좌표 위치에 따라 좌/우 범위 좁히기
			if a < sadaes[mid_idx]:
				# 중앙값보다 동물의 x좌표가 왼쪽 -> 왼쪽으로 범위 좁히기
				end_idx = mid_idx - 1
			else:
				start_idx = mid_idx + 1
	
	return 0 # 못 잡는 경우

for _ in range(N):
	a,b = map(int, input().strip().split()) # 동물의 좌표
	result += binary_search_is_hunt(a,b)
	
print(result)
	

풀이