魔法学院(hard version)
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

本题与easy version唯一的区别在于数据范围不同。

亚可喜欢上了收集不包括空格的可见字符(ASCII码为33~126),在她眼中,一个字符的价值为其ASCII码大小,比如’a’的价值为97。

目前她已经收集了个不包括空格的可见字符,第个字符为。可是她想要把自己收集的个字符的价值和最大化,因此去请求了戴安娜的帮助。

戴安娜有种魔法,第种魔法可以将区间的一个字符替换为。因为戴安娜出色的魔力,所以每种魔法都可以使用无限次。

请问戴安娜使用完若干次魔法后,亚可收集的个字符的最大价值和可以是多少?

输入描述:

第一行两个正整数,,其中:,

第二行一个长度为且由不包括空格的可见字符组成的字符串

接下来行,每行两个正整数,和一个不包括空格的可见字符,满足

输出描述:

输出使用完若干次魔法后的最大价值和。
示例1

输入

复制
3 3
aaa
1 3 b
2 3 c
3 3 d

输出

复制
297