在韩国,小青蛙(cheonggaeguri)的顽皮是家喻户晓的。这种名声绝非虚传,因为它们总是在夜间跳过稻田,踩扁水稻。清晨,在记录下哪些水稻被踩扁后,你想找出造成最大破坏的青蛙的路径。青蛙总是沿着一条直线跳过稻田,且每次跳跃的步长都相同:
你的稻田中的水稻排列在网格的交叉点上,如图 1 所示。这些调皮的青蛙会完全穿过你的稻田,从稻田一侧的外部开始,到另一侧的外部结束,如图 2 所示:
图 1 与 图 2
许多青蛙可以跳过稻田,从一棵水稻跳到另一棵水稻。每次跳跃都会落在一棵水稻上并将其踩扁,如图 3 所示。请注意,在夜间,同一棵水稻可能会被多只青蛙踩踏。当然,你无法看到显示青蛙路径的线条,也无法看到它们在稻田外部的任何跳跃——对于图 3 的情况,你所能看到的景象如图 4 所示:
图 3 与 图 4
根据图 4,你可以重建青蛙在稻田里可能经过的所有路径。我们只对在穿过稻田的过程中至少踩扁了 3 棵水稻的青蛙感兴趣。这样的路径被称为一条青蛙路径。在这种情况下,这意味着图 3 中显示的三条路径都是青蛙路径(当然也存在其他可能的青蛙路径)。
沿着第 1 列向下垂直的路径可能是一条步长为 4 的青蛙路径,但由于只有 2 棵水稻被踩扁,因此我们对此不感兴趣;而包含第 2 行第 3 列、第 3 行第 4 列和第 6 行第 7 列水稻的对角线路径虽然有 3 棵被踩扁的水稻,但没有一个固定的步长能以这种方式拉开跳跃间隔并同时落在至少 3 棵水稻上,因此它不是一条青蛙路径。
还请注意,在青蛙路径所在的直线上,可能会有其他被踩扁的水稻,但该青蛙路径并不需要落在这些水稻上(例如图 4 中横跨第 2 行的水平路径上的 $(2, 6)$ 处的水稻);事实上,某些被踩扁的水稻可能根本无法用任何青蛙路径来解释。
你的任务是编写一个程序,确定在所有可能的单条青蛙路径中,青蛙最多能落下的次数(即踩扁水稻的最大数量)。在图 4 中,答案是 7,由横跨第 6 行的青蛙路径得到。
输入格式
你的程序需要从标准输入读取数据。
第一行包含两个整数 $R$ 和 $C$,分别表示稻田的行数和列数,$1 \le R, C \le 5000$。
第二行包含一个整数 $N$,表示被踩扁的水稻数量,$3 \le N \le 5000$。
接下来的 $N$ 行,每行包含两个整数,分别表示一棵被踩扁的水稻的行号($1 \le \text{行号} \le R$)和列号($1 \le \text{列号} \le C$),两个整数之间用一个空格隔开。每棵被踩扁的水稻只会被列出一次。
输出格式
你的程序需要向标准输出写入数据。
输出包含一行,若存在至少一条青蛙路径,则输出在造成最大破坏的青蛙路径上被踩扁的水稻数量;否则输出 0。
样例
输入样例 1
6 7 14 2 1 6 6 4 2 2 5 2 6 2 7 3 4 6 1 6 2 2 3 6 3 6 4 6 5 6 7
输出样例 1
7
输入样例 2
6 7 18 1 1 6 2 3 5 1 5 4 7 1 2 1 4 1 6 1 7 2 1 2 3 2 6 4 2 4 4 4 5 5 4 5 5 6 6
输出样例 2
4
说明
图 5 与 图 6
在样例 2 中(对应图 5),一只青蛙最多踩扁的水稻数量为 4(如图 6 所示)。
评分
如果你的程序在时间限制内对测试用例输出正确答案,你将获得该测试用例的满分,否则获得 0 分。