#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(a, b, c) for (int (a) = (b) ; (a) <= (c) ; (a) ++)
#define pii pair<int, int>
#define tiii tuple<int, int, int>
#define c(a) cout << (a) << " ";
#define ct(a) cout << (a) << '\n'
#define test(a, b) cout << (a) << " " << (b) << '\n'
const int N = 2e5 + 100;
const int inf = 0x3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
int ksm(int a, int b) {int res = 1;while(b){if (b % 2) res = res * a % mod;b /= 2;a = a * a % mod;} return res;}
int head[N], idx = 0;
struct Edge{int to, w, next;} edges[N << 1];
void add(int u, int v, int w) {edges[++ idx] = {v, w, head[u]}, head[u] = idx;}
// struct Edge{int to, next;} edges[N << 1];
// void add(int u, int v) {edges[++ idx] = {v, head[u]}, head[u] = idx;}
int n, k;
int a[N], sum1[N], sum2[N];
void Jun()
{
cin >> n >> k;
FOR (i, 1, n) cin >> a[i];
sort(a + 1, a + 1 + n);
FOR (i, 1, n)
{
sum1[i] = (sum1[i - 1] + a[i]) % mod;
sum2[i] = ((1 + a[i]) * a[i] / 2 + sum2[i - 1]) % mod;
}
for (int x, i = 1 ; i <= k ; i ++)
{
cin >> x;
int l = 0, r = n;
while (l < r)
{
int mid = l + r + 1 >> 1;
if (a[mid] <= x) l = mid;
else r = mid - 1;
}
int ans1 = sum2[l];
int ans2 = ((sum1[n] - sum1[l] + mod) % mod) * x; ans2 %= mod;
int reduce = ((n-l)*(x-1)*x/2)%mod;
cout << ((ans1 + ans2) % mod - reduce + mod) % mod << '\n';
}
}
signed main()
{
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(0);
int T = 1;
// cin >> T;
while(T --) Jun();
return 0;
}
为什么就对75%我天塌了。