#P1736. Block Town

Block Town

描述

孩子们喜欢玩积木(立方体的木砖)。他们通常会搭起高高的塔,但小约翰尼有着不同的想法。他打算建造一座大城镇。他的爸爸给他买了一张长方形的桌子;这张桌子的宽度正好是KK块积木的长度,长度正好是LL块积木的长度。在开始实际建造城镇之前,约翰尼决定先设计一个这样的城镇规划。他在桌子上画了一个由K×LK\times L个正方形组成的方形网格。他想在画好的网格的一些正方形上放置由一块或多块积木组成的塔;其余的正方形将是空的。由于桌子非常大,约翰尼不打算为每个正方形精确规划他要在上面放置多少块积木。他只想要确定他的城镇从正面和右面看的形状。他在纸上画出了这两个视图(所规划城镇的二维投影)。你可以在图片中看到这些图纸的一个例子以及由木砖建成的相应的城镇:

侧视图 正视图 最大规模的城镇 最小规模的城镇(正面和背面视图)

约翰尼的爸爸担心他们没有足够的积木来完成建造约翰尼规划的城镇。要求你编写一个程序,计算出能够建造出符合约翰尼规划的城镇所需的最少和最多的积木数量。此外,该程序还可以判断是否有可能建造出满足这些视图的城镇。

输入

输入的第一行包含两个正整数KKLL—— 桌子的宽度和长度(以积木的数量表示)。桌子的宽度和长度都不超过100000100000块积木。输入文件接下来的几行包含了城镇正视图的描述。该描述由从左到右每个正方形上可见建筑物的一系列高度组成(高度也是用积木的数量来衡量的)。每行只有一个数字,也就是说,城镇正视图描述的行数等于KK—— 桌子的宽度。类似地,输入文件接下来的LL行包含了城镇右视图的描述。现在,木砖塔的高度是从前排到后排来指定的。你可以假设城镇中没有高度超过50005000块积木的建筑物。建造整个城镇所需的最多积木数量不超过20000000002000000000块。

输出

输出只包含一行。如果不可能建造出具有给定正视图和右视图的城镇,那么这一行只写文本 “NoNo solution.solution.”。在其他情况下,这一行将写两个数字,并用单个空格分隔。第一个数字是小约翰尼按照他的规划建造城镇可以使用的最少积木数量,第二个数字是最多积木数量。

输入数据 1

4 3
1
3
4
2
1
4
2

输出数据 1

10 21

来源

CEOI 1999