冒险者
题号:NC206693
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

一个冒险者接受了进入地下城讨伐怪物的任务,他有一个技能能释放k个分身,他准备让他的分身替他完成任务。
地下城是一个n行m列的迷宫,迷宫有k个入口,迷宫中的每一格都有一个数x:

x=0,表示这一格是迷宫入口,一个迷宫最多有k个入口,最少有一个。
x>0,表示这一格存在一个怪物,x为该怪物的战斗力;当进入这一格的分身战斗力严格大于怪物时,分身将成功讨伐怪物,冒险者将获得x点经验;每获得d点经验,冒险者能够提升1点战斗力。

在迷宫中,分身只能进入与所在格有共用同一边的方格,即只能向东西南北四个方向前进,同一方格可以多次经过。

为了清空迷宫中所有的怪物,冒险者决定让每个分身进入一个区域去讨伐怪物。冒险者初始战斗力为w,分身战斗力与冒险者相同,冒险者战斗力提升时,分身的战斗力也会同时提升。
现在已知迷宫地图,要求你告诉冒险者,他是否能够完成任务;如果能,他完成任务后,战斗力会提升多少。

输入描述:

第一行一个整数T(1≤T≤10),表示共有T组测试数据。
对于每组测试数据,第一行有三个整数
w-冒险者的初始战斗力
d-d点经验提升1点战斗力
k-分身数量
第二行有两个整数n,m(1≤n,m≤500)。
n-迷宫行数
m-迷宫列数
接下来 n 行,每行 m 个数字 a i,j( 0 ≤ a i,j ≤ 1e9 )

输出描述:

如果冒险者不能完成任务,输出第一行"NO";否则输出第一行"YES",并在第二行输出冒险者战斗力提升了多少。

示例1

输入

复制
2
2 1 2
1 5
0 1 1 1 0
2 1 1
2 2
0 2
2 1

输出

复制
YES
3
NO