#include <bits/stdc++.h>
using namespace std;
#define int long long
using ll = long long;
const int N = 1e6 + 5, MOD = 998244353, HSMOD = 1610612741, HSMOD2 = 998244353;
int n,q;
struct Node
{
int l,r;
Node()=default;
Node(int l,int r):l(l),r(r){}
}a[N],b[N],c[N];
ll pre[N],suf[N],pre2[N],suf2[N];
ll vl[N],vr[N],vl2[N],vr2[N];
int cnt[N],cc[N];
long long qpow(long long a, long long b)
{
long long res = 1ll, base = a;
while (b)
{
if (b & 1ll) res = res * base % MOD;
base = base * base % MOD;
b >>= 1ll;
}
return res;
}
ll inv(ll a)
{
return qpow(a, MOD - 2ll);
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
b[i]=c[i]=a[i];
cc[a[i].l]++,cc[a[i].r+1]--;
}
for(int i=0;i<=(int)1e6;i++)
{
cnt[i]=(i?cnt[i-1]:0)+cc[i];
}
sort(b+1,b+n+1,[&](const auto& x,const auto&y){return x.r<y.r;});
sort(c+1,c+n+1,[&](const auto& x,const auto&y){return x.l<y.l;});
for(int i=1;i<=n;i++) pre[i]=(pre[i-1]+(1ll*b[i].r*b[i].r)),pre2[i]=(pre2[i-1]+b[i].r);
for(int i=n;i>=1;i--)
{
suf[i]=(suf[i+1]+(1ll*c[i].l*c[i].l));
suf2[i]=(suf2[i+1]+c[i].l);
}
for(int i=0;i<=(int)1e6;i++)
{
int l=1,r=n,pos=0;
while(l<=r)
{
int mid=l+r>>1;
if(b[mid].r<i) pos=mid,l=mid+1;
else r=mid-1;
}
vr[i]=pre[pos];
vr2[i]=pre2[pos];
l=1,r=n;
pos=n+1;
while(l<=r)
{
int mid=l+r>>1;
if(c[mid].l>i) pos=mid,r=mid-1;
else l=mid+1;
}
vl[i]=suf[pos];
vl2[i]=suf2[pos];
}
ll invn=inv(n);
while(q--)
{
ll x;
cin>>x;
int l=0,r=(int)1e6,pos=-1;
ll ns=-1;
while(l<=r)
{
int mid=l+r>>1;
ll s=1ll*cnt[mid]*mid+vl2[mid]+vr2[mid];
if(s>=x) pos=mid,r=mid-1,ns=s;
else l=mid+1;
}
ll ret=1ll*cnt[pos]*pos%MOD*pos%MOD+vl[pos]%MOD+vr[pos];
ret%=MOD;
ret=(ret-(pos*pos%MOD)+MOD)%MOD;
ll nd=(ns-x);
ret=ret+((pos-nd)*(pos-nd)%MOD);
ret%=MOD;
ret=ret*invn%MOD;
ll ss=x*invn%MOD;
ss=(ss*ss)%MOD;
cout<<(ret-ss+MOD)%MOD<<"\n";
}
return 0;
}