실행 시간

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

NN개의 작업을 병렬처리하는 프로그램을 개발하였다. NN개의 작업을 실행 시간이 다 다르고, 모든 작업에는 순서가 존재한다.

하나의 작업의 실행이 끝나면 다음 작업들에 신호를 준다. 신호를 받은 작업의 실행 조건은 이전 작업들로 부터 신호를 다 받았을 때만 실행할 수 있다.

위 그림과 같이 작업 AA, BB, CC, DD, EE가 있고 작업의 순서가 정해져있다. 맨 처음에 작업 AA을 실행하여 작업 EE까지 실행한다. 이때, 작업 AA와 같이 맨 처음에 시작해야하는 작업과 작업 EE와 같이 맨 마지막으로 실행되는 작업은 반드시 하나가 존재한다.

작업 AA부터 작업 EE까지 실행 시간은 순서대로 1초, 2초, 3초, 2초, 1초라고 가정하자. 5개의 작업들이 실행되는 순서는 다음과 같다.

  • 0초 : 먼저, 작업 AA가 실행된다.
  • 1초 : 작업 AA가 1초 동안 실행 후 작업 BB, CC, DD한테 작업이 끝났다고 신호를 준다.
  • 1초 : 신호를 받은 작업 BB, CC, DD가 실행 조건에 만족하므로 동시에 시작된다.
  • 3초 : 작업 BB와 작업 DD는 실행 시간이 2초이므로 2초 후에 다음 작업인 작업 EE에 신호를 보낸다. 
  •  3초 : 신호를 받은 작업 EE는 이전 작업들 중 작업 CC에 신호를 받지 못했으므로 대기한다.
  •   4초 : 작 업 CC는 실행 시간이 3초이므로 작업 CC가 실행되고 3초 후에 작업 EE에 신호를 보낸다.
  • 4초 : 작업 EE는 모든 신호를 받았으므로 실행이 된다. 작업 EE는 실행시간이 1초이다.
  • 5초 : 작업 EE가 종료되어 모든 작업의 실행 종료되었다.

따라서, 작업 EE가 5초 후에 실행 종료된다.

그런데 해당 프로그램에서 맨 처음에 시작해야하는 작업과 맨 마지막으로 실행되는 작업을 제외한 나머지 N2N-2개의 작업 중 정확히 KK개를 실행 시간을 0초로 강제로 바꿔도 프로그램에 아무런 문제가 발생하지 않는다는 것을 확인했다.

정확히 KK개의 작업의 실행시간을 강제로 0초로 바꾸었을 때 모든 작업이 완료되는 데에 최소 시간을 구하시오.

입력

작업의 개수 NN개, 작업 순서를 알려주는 개수 MM, 실행 시간을 강제로 0초로 바꿀 수 있는 작업 개수 KK가 공백으로 구분되어 주어진다. 이때, 작업 순서는 하나의 작업이 끝난 이후 어떤 작업이 실행되는지 알려주는 정보이다.

2번째 줄에는 NN개 작업에 대한 실행 시간이 공백으로 구분되어 주어진다.

3번째 줄부터 M +2M + 2줄까지 작업 순서에 대한 정보가 들어온다. 각 정보는 두 개의 정수 SS, EE가 공백으로 구분되어 주어지며, 작업 SS가 끝난 후 작업 EE가 실행된다는 의미이다.

작업의 시작 번호는 항상 1이고 이 작업으로 모든 작업이 실행되는 것을 보장한다.

작업 AA, BB, CC가 있다고 했을 때, 작업의 순서가 A B C AA \rightarrow B \rightarrow C \rightarrow A와 같이 사이클을 이루는 경우가 없는 것을 보장한다.

출력

정확히 KK개 작업의 실행 시간을 0초로 바꿨을 때, 모든 작업이 완료되는 데에 걸리는 최소 시간을 출력한다.

제한

  • 2N1002 \le N \le 100
  • N1M500N - 1 \le M \le 500
  • 0Kmin(N2,3)0 \le K \le min(N - 2, 3)
  • 1S,EN1 \le S, E \le N
  • 11 \le 실행 시간 1,000,000\le 1,000,000, 실행 시간은 정수