P4237 荒芜的海洋

题目背景

在一个渺远的海洋中,一场世纪大战级别的游戏上演了。 感谢 [lsq](https://www.luogu.org/space/show?uid=26556) 本人参与验题

题目描述

这块海洋上有 $n$ 个小岛,小岛有 $m$ 座石桥相连。有一些小岛上有 wzt 埋下的奖赏,它们非常诱人。它们的诱惑力用整数 $k_i$ 描述。而一些小岛上有 lsq 的雇佣兵,他们有一个价格,用整数 $b_i$ 描述。lsq 必须花钱,他的雇佣兵才会帮他寻找奖赏。 雇佣兵的价格并不会变。对于每一个雇佣兵,在寻找过程中,他会越过一座座的桥,这过程中,他的价格会 **加上他所经过的所有桥的长度** 。 遗憾的是,不只有桥的阻挡,每座岛上有许多猛兽,虽然雇佣兵们都英勇无比,但驱逐猛兽的过程会让人很不爽。因此,对于每一个雇佣兵,价格会 **加上他所经过的所有岛(包括出发岛)上的猛兽数量之和**。 lsq 了解这里的一切情况,他需要做出决策,即决定他的每个雇佣兵应该去找哪个奖赏。lsq 的目的是找到所有奖赏,并取得最大收益。每个雇佣兵只能雇佣一次。 收益的定义为: **所有奖赏的诱惑力减去 lsq 花的所有的钱**。 lsq 的决策异常艰难,于是只好请 ~~AK 过 NOI~~ 的你来帮忙。

输入格式

第一行 $4$ 个数,$n$(小岛总数),$m$(桥总数),$a$(lsq 的雇佣兵总人数),$b$(奖赏总数)。 接下来一行 $n$ 个数,表示每个小岛上的猛兽数量。 接下来 $m$ 行,每行三个数 $u,v,w$,表示 $u$ 号小岛与$v$ 号小岛之间有一座长度为 $w$ 的桥相连。 接下来 $a$ 行,每行两个数 $q_i,p_i$,表示 $i$ 号雇佣兵价格为 $q_i$,初始位置为 $p_i$ 号小岛。 接下来 $b$ 行,每行两个数 $k_i,q_i$,表示 $i$ 号奖赏的诱惑力为 $k_i$,位置为 $q_i$ 号小岛。

输出格式

如果能找到所有奖赏,输出“Yes”,并在下一行输出能达到的最大满意度。 如果不能找到所有奖赏,输出“No”,并在下一行输出最多能找到多少奖赏。

说明/提示

对于 $30\%$ 的数据,满足 $n \le 200,m\le 200,b\le a\le 30$。 对于 $50\%$ 的数据,满足 $n \le 500,m\le 800,b\le a\le 100$。 对于 $100\%$ 的数据,满足 $n \le 1000,m\le 15000,b\le a\le 300$,其余数据保证不会爆 int(Pascal 语言为 longint)。 ![](https://cdn.luogu.com.cn/upload/pic/14497.png) ![](https://cdn.luogu.com.cn/upload/pic/14498.png) By [Ebola](https://www.luogu.org/space/show?uid=20158)