#joi2014ho4. [joi2014ho4]フクロモモンガ (Sugar Glider)

[joi2014ho4]フクロモモンガ (Sugar Glider)

課題

各木の高さと,JOI 君が直接飛び移ることができる木の組の情報と,最初 JOI 君がいる場所の高さが与えられる.木 NN の頂上に行くためにかかる時間の最小値を求めるプログラムを作成せよ.

入力

標準入力から以下のデータを読み込め.

  • 11 行目には,整数 N,M,XN, M, X が空白を区切りとして書かれている.これは,木の本数が NN 本,移動できる木の組が MM 組あり,最初 JOI 君が木 11 の高さ XX メートルの位置にいることを表す.
  • 続く NN 行のうちの ii 行目 (1iN1 \leqq i \leqq N) には,整数 HiH_i が書かれている.これは,木 ii の高さが HiH_i メートルであることを表す.
  • 続く MM 行のうちの jj 行目 (1jM1 \leqq j \leqq M) には,整数 Aj,Bj,TjA_j, B_j, T_j (1AjN1 \leqq A_j \leqq N1BjN1 \leqq B_j \leqq NAjBjA_j \neq B_j) が空白を区切りとして書かれている.これは,木 AjA_j と木 BjB_j の間を相互に TjT_j 秒で飛び移ることができることを表している.また,1j<kM1 \leqq j < k \leqq M ならば,(Aj,Bj)(Ak,Bk)(A_j, B_j) \neq (A_k, B_k) および (Aj,Bj)(Bk,Ak)(A_j, B_j) \neq (B_k, A_k) を満たす.

出力

標準出力に,木 11 の高さ XX メートルの位置から木 NN の頂上に行くためにかかる時間の最小値を秒単位で表す整数を 11 行で出力せよ.ただし,そのような方法がない場合は代わりに \-1\-1 を出力せよ.

制限

すべての入力データは以下の条件を満たす.

  • 2N1000002 \leqq N \leqq 100\,000
  • 1M3000001 \leqq M \leqq 300\,000
  • 1Hi10000000001 \leqq H_i \leqq 1\,000\,000\,000 (1iN1 \leqq i \leqq N).
  • 1Tj10000000001 \leqq T_j \leqq 1\,000\,000\,000 (1jM1 \leqq j \leqq M).
  • 0XH10 \leqq X \leqq H_1

小課題

小課題 1 [25 点]

以下の条件を満たす.

  • N1000N \leqq 1\,000
  • M3000M \leqq 3\,000
  • Hi100H_i \leqq 100 (1iN1 \leqq i \leqq N).
  • Tj100T_j \leqq 100 (1jM1 \leqq j \leqq M).

小課題 2 [25 点]

以下の条件を満たす.

  • X=0X = 0

小課題 3 [50 点]

追加の制限はない.

入力例 1

5 5 0
50
100
25
30
10
1 2 10
2 5 50
2 4 20
4 3 1
5 4 20

出力例 1

110

例えば,以下のように移動すればよい.

  1. 115050 メートル登る.
  2. 11 から木 22 に飛び移る.
  3. 22 から木 44 に飛び移る.
  4. 44 から木 55 に飛び移る.
  5. 551010 メートル登る.

入力例 2

2 1 0
1
1
1 2 100

出力例 2

-1

JOI 君は木 11 から木 22 に飛び移ることができない.

入力例 3

4 3 30
50
10
20
50
1 2 10
2 3 10
3 4 10

出力例 3

100