저렴한 여행

마을 1에서 N까지 가는 경로 중 요금 합이 S 이하이면서 총 이동 시간이 가장 짧은 것을 찾는다. 마을과 노선은 여러 번 지나도 된다.

보통7최단 경로그래프동적 계획법그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

이반은 다음 프로그래밍 대회가 열리는 곳까지 가는 교통비를 자기 돈으로 내야 한다. 가진 돈은 SS 유로뿐이다. 그래서 이반은 대중교통 시간표와 요금을 미리 조사했다.

이반이 사는 마을을 11번, 대회가 열리는 마을을 NN번, 도중에 지나갈 수 있는 나머지 마을을 2,3,,N12, 3, \dots, N-1번이라고 한다. 이반이 찾은 버스 노선은 MM개다. 각 노선은 마을 vv와 마을 ww를 잇고, 어느 방향으로 타든 tt시간이 걸리며 요금은 한 번에 ee유로다. 같은 두 마을을 잇는 버스가 여러 개 있을 수 있고, 그 버스의 소요 시간과 요금은 서로 다를 수 있다.

요금 합이 SS 유로 이하인 11번 마을에서 NN번 마을까지의 경로를 찾는 프로그램을 작성하시오. 그런 경로가 여러 개면 버스에 앉아 있는 시간의 합이 가장 작은 경로를 찾아야 한다.

버스를 한 번 탈 때마다 그 노선의 요금 ee를 내고 시간 tt를 쓴다. 같은 마을이나 같은 노선을 여러 번 지나가도 되며, 그때마다 요금과 시간을 다시 더한다.

NN11이면 출발지가 곧 목적지이므로 소요 시간은 00이다.

입력

첫째 줄에 양의 정수 SS, NN, MM이 주어진다. S2000S \le 2000, N3000N \le 3000, M5000M \le 5000이다.

다음 MM개 줄에는 노선 하나의 정보를 나타내는 네 정수 vv, ww, tt, ee가 주어진다. 1vN1 \le v \le N, 1wN1 \le w \le N, 1t1001 \le t \le 100, 1e1001 \le e \le 100이다.

출력

찾은 경로의 총 소요 시간을 한 줄에 출력한다. 요금 합이 SS 유로 이하인 경로가 없으면 -1을 출력한다.