import sys from collections import deque def main(): n, m, A, B = map(int, sys.stdin.readline().split()) target_start = B + 1 if target_start > n + 1: print(-1) return graph = [[] for _ in range(n + 2)] # Nodes from 1 to n+1 for _ in range(m): L, R = map(int, sys.stdin.readline().split()) a = L b = R + 1 graph[a].append(b) graph[b].append(a) # Initialize distance array and queue distance = [-1] * (n + 2) q = deque() # Add all X in [1, A] as starting points for X in range(1, A + 1): if distance[X] == -1: distance[X] = 0 q.append(X) # BFS to compute shortest paths while q: u = q.popleft() for v in graph[u]: if distance[v] == -1: distance[v] = distance[u] + 1 q.append(v) # Find the minimum distance among nodes >= B+1 min_dist = float('inf') for y_plus_1 in range(target_start, n + 2): if distance[y_plus_1] != -1: if distance[y_plus_1] < min_dist: min_dist = distance[y_plus_1] print(min_dist if min_dist != float('inf') else -1) if __name__ == "__main__": main()