牛牛想起飞
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个长度为 n 的序列和一个长度为 n 的序列,对于序列中的每一个数字a_i,牛牛都可以进行以下操作:
(1) 将数字 a_ia_i 变成
(2) 将数字 a_ia_i 变成 a_i - b_i
牛牛很懒,所以每个数字只能最多进行一次操作,甚至不操作。现在给出一个数字 y ,牛牛想要知道在做合理的操作后能得到模 y 意义下的最大序列和是多少。
换句话说,设  是最终得到的 数组的样子,你要使得  结果最大化。
做出这道题他就能起飞,你能帮帮他吗?

输入描述:

第一行输入
第二行输入 n 个整数
第三行输入 n 个整数

输出描述:

输出能得到模 y 意义下的最大序列和
示例1

输入

复制
3 100
1 2 3
1 1 1

输出

复制
9