一支军队即将开战,他们希望将所有士兵分成若干个小组,以使他们的总实力最大化。假设有 $N$ 名士兵站在二维平面上,所有士兵都站在 $x$ 轴上不同的位置,第 $i$ 名士兵站在 $x$ 轴上的 $x_i$ 处(士兵按从左到右的顺序编号为 $1$ 到 $N$)。你需要将士兵按 $x$ 坐标排序后的顺序(从左到右)分成若干个小组。
你的任务是将他们分成一个或多个小组,每个士兵恰好属于一个小组,且任何小组的所有成员在位置上都是相邻的,中间没有其他小组的成员。因此,每个小组将由两个整数 $a$ 和 $b$(其中 $a \le b$)定义,这意味着该小组包括从第 $a$ 名士兵到第 $b$ 名士兵(包含两端)。
每名士兵都会被赋予一个函数 $f_i$,用于评估小组的实力(仅当该士兵是小组中最左侧的士兵时使用)。对于每个函数 $f_i$,你将获得 $M$ 个不同的值 $z_j$(编号为 $1$ 到 $M$),这些值将用于评估所有函数。对于每个函数 $f_i$,你将获得 $f_i(z_j)$ 的值。为了得到除给定的 $M$ 个点之外的任何 $z$ 的值,你只需将 $(z_j, f_i(z_j))$ 视为一个点,并使用线段连接每两个相邻的点,现在你就拥有了一个覆盖从 $z_1$ 到 $z_M$ 所有可能值的函数。
整支军队的实力是每个小组实力之和。一个从第 $a$ 名士兵到第 $b$ 名士兵的小组,其强度为 $f_a(x_b)$,换句话说,它是当我们将最右侧士兵的 $x$ 坐标代入最左侧士兵的函数时,该函数的值。请查看文末的说明以获取关于第一个测试用例的更多解释。
给定上述所有必要细节,你的任务是将士兵分成若干小组,以使整支军队的总实力最大化。
输入格式
你的程序将在一个或多个测试用例上进行测试。输入的第一行是一个整数 $T$ ($1 \le T \le 100$),表示测试用例的数量。接下来是 $T$ 个测试用例。
每个测试用例的第一行包含两个空格分隔的整数 $N$ ($1 \le N \le 10^5$) 和 $M$ ($2 \le M, N \times M \le 10^5$),分别表示士兵的数量和 $z$ 值的数量。
接下来一行包含 $N$ 个排序后的整数,表示士兵的位置 $x_1, x_2, \dots, x_N$ ($-10^6 \le x_i \le 10^6$)。
接下来一行包含 $M$ 个排序后的整数,表示如上所述的 $z$ 值 $z_1, z_2, \dots, z_M$ ($-10^6 \le z_j \le 10^6$)。
接下来 $N$ 行,每行包含 $M$ 个空格分隔的整数。第 $i$ 行从左往右的第 $j$ 个值是 $f_i(z_j)$ ($-10^6 \le f_i(z_j) \le 10^6$)。
保证 $z_1 \le x_1$ 且 $x_N \le z_M$。
输出格式
对于每个测试用例,打印一行,包含一个保留 6 位小数的十进制数,即你能得到的军队总实力的最大值。
样例
输入 1
3 3 4 -5 2 3 -6 1 4 5 -1 3 6 0 2 -2 -4 -6 -4 0 4 5 5 2 -2 5 8 9 10 -2 10 -7 -6 -3 -7 0 -8 9 -10 5 -4 2 2 0 7 -2 7 -10 -2 -4 -10
输出 1
6.666667 -6.000000 -2.000000
说明
下图展示了第一个测试用例:
$x$ 轴上的 3 个实心圆圈是 3 名士兵的位置,我们有如上所述绘制的 3 个函数 $f_1, f_2$ 和 $f_3$(每名士兵一个)。这里的最佳方案是将前 2 名士兵放在一组,该小组的实力将是 $f_1(x_2)$,即 $f_1(2) = 4$,最后一名士兵单独一组,该小组的实力将是 $f_3(x_3)$,即 $f_3(3) = 2.666667$,因此总实力为 $6.666667$(全部四舍五入到 6 位小数)。