#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,x,y;
ll mod=1000000007;
int a[1000010];
ll s[1000010];
ll power(ll a, ll b){
if(b==0)
return 1;
ll t=power(a,b/2);
t=(t*t)%mod;
if(b%2)
return (a*t)%mod;
return t%mod;
}
ll coeff(ll a){
return ((power(3,a)+1)%mod*power(2,mod-2))%mod;
}
ll query(ll s,ll e,ll x,ll y,ll lval,ll rval, ll t){ //cout<<t<<" - "<<s<<" "<<e<<endl;
if(s>e || s>y || e<x || t>m+3){
return 0;
}
if(e-s==1){
if(s>=x && e<=y){
return (coeff(m-t)*(lval+rval)%mod)%mod;
}
if(s==x)
return lval%mod;
else
return rval%mod;
}
if(s>=x && e<=y){ //cout<<t<<" - "<<s<<" "<<e<<" "<<(coeff(m-t)*(lval+rval))%mod<<endl;
return (coeff(m-t)*(lval+rval)%mod)%mod;
}
ll mid=(s+e)/2,sub1=0,sub2=0,sub=0;
sub1=query(s,mid,x,y,lval,(lval+rval)%mod,t+1);
//cout<<t<<" sub1- "<<s<<" "<<mid<<" "<<sub1<<endl;
if(y>=1+mid)
sub2=query(mid,e,x,y,(lval+rval)%mod,rval,t+1);
//cout<<t<<" sub2- "<<mid<<" "<<e<<" "<<sub2<<endl;
sub=(sub1+sub2)%mod;
if(sub1>0 && sub2>0){
sub=(mod+sub-lval)%mod;
sub=(mod+sub-rval)%mod;
}
//cout<<t<<" sub- "<<s<<" "<<e<<" "<<sub<<endl;
return sub%mod;
}
int main(){
int t;
cin>>t;
while(t--){
scanf("%lld %lld %lld %lld",&n,&m,&x,&y);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
s[0]=a[0]=0;
s[1]=a[1];
for(int i=2;i<=n;i++){
s[i]=(s[i-1]+a[i])%mod;
//cout<<s[i]<<" ";
}
ll x1,y1;
x1 = 1+(x-1.0)/power(2,m);
y1 = 1+ceil((y-1.0)*1.0/power(2,m));
ll t0,t1,t2;
t0=(s[y1]-s[x1-1]+mod)%mod;
//cout<<t0<<endl;
t1=(t0*2)%mod;
t1=(t1-a[y1]+mod)%mod;
t1=(t1-a[x1]+mod)%mod;
t1=(t1*coeff(m))%mod;
t2=(t0-a[x1]+mod)%mod;
t2=(t2-a[y1]+mod)%mod;
//cout<<t2<<endl;
ll sum;
sum=(mod+t1-t2)%mod;
//cout<<"Hola "<<sum<<endl;
ll limit=1+power(2,m)*(x1-1);
sum=(mod+sum-query(limit,limit+power(2,m),limit,x-1,a[x1],a[x1+1],0))%mod;
//cout<<sub<<endl;
limit=1+power(2,m)*(y1-1);
sum=(mod+sum-query(limit-power(2,m),limit,y+1,limit,a[y1-1],a[y1],0))%mod;
//cout<<sub<<endl;
printf("%lld\n",(sum)%mod);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwpsbCBuLG0seCx5OwpsbCBtb2Q9MTAwMDAwMDAwNzsKaW50IGFbMTAwMDAxMF07CmxsIHNbMTAwMDAxMF07CgpsbCBwb3dlcihsbCBhLCBsbCBiKXsKCWlmKGI9PTApCgkJcmV0dXJuIDE7CglsbCB0PXBvd2VyKGEsYi8yKTsKCXQ9KHQqdCklbW9kOwoJaWYoYiUyKQoJCXJldHVybiAoYSp0KSVtb2Q7CglyZXR1cm4gdCVtb2Q7Cn0KCmxsIGNvZWZmKGxsIGEpewoJcmV0dXJuICgocG93ZXIoMyxhKSsxKSVtb2QqcG93ZXIoMixtb2QtMikpJW1vZDsKfQoKbGwgcXVlcnkobGwgcyxsbCBlLGxsIHgsbGwgeSxsbCBsdmFsLGxsIHJ2YWwsIGxsIHQpeyAvL2NvdXQ8PHQ8PCIgLSAiPDxzPDwiICI8PGU8PGVuZGw7CglpZihzPmUgfHwgcz55IHx8IGU8eCB8fCB0Pm0rMyl7CgkJcmV0dXJuIDA7Cgl9CQoJaWYoZS1zPT0xKXsKCQlpZihzPj14ICYmIGU8PXkpeyAJCQkKCQkJcmV0dXJuIChjb2VmZihtLXQpKihsdmFsK3J2YWwpJW1vZCklbW9kOwoJCX0KCQlpZihzPT14KQoJCQlyZXR1cm4gbHZhbCVtb2Q7CgkJZWxzZQoJCQlyZXR1cm4gcnZhbCVtb2Q7CgkJCgl9CglpZihzPj14ICYmIGU8PXkpeyAvL2NvdXQ8PHQ8PCIgLSAiPDxzPDwiICI8PGU8PCIgIjw8KGNvZWZmKG0tdCkqKGx2YWwrcnZhbCkpJW1vZDw8ZW5kbDsKCQlyZXR1cm4gKGNvZWZmKG0tdCkqKGx2YWwrcnZhbCklbW9kKSVtb2Q7Cgl9CQoJbGwgbWlkPShzK2UpLzIsc3ViMT0wLHN1YjI9MCxzdWI9MDsKCXN1YjE9cXVlcnkocyxtaWQseCx5LGx2YWwsKGx2YWwrcnZhbCklbW9kLHQrMSk7IAoJLy9jb3V0PDx0PDwiIHN1YjEtICI8PHM8PCIgIjw8bWlkPDwiICI8PHN1YjE8PGVuZGw7CglpZih5Pj0xK21pZCkKCQlzdWIyPXF1ZXJ5KG1pZCxlLHgseSwobHZhbCtydmFsKSVtb2QscnZhbCx0KzEpOwkJCgkvL2NvdXQ8PHQ8PCIgc3ViMi0gIjw8bWlkPDwiICI8PGU8PCIgIjw8c3ViMjw8ZW5kbDsKCXN1Yj0oc3ViMStzdWIyKSVtb2Q7CglpZihzdWIxPjAgJiYgc3ViMj4wKXsKCQlzdWI9KG1vZCtzdWItbHZhbCklbW9kOwoJCXN1Yj0obW9kK3N1Yi1ydmFsKSVtb2Q7Cgl9CgkvL2NvdXQ8PHQ8PCIgc3ViLSAiPDxzPDwiICI8PGU8PCIgIjw8c3ViPDxlbmRsOwoJcmV0dXJuIHN1YiVtb2Q7CgkKfQoKaW50IG1haW4oKXsKCWludCB0OwoJY2luPj50OwoJd2hpbGUodC0tKXsKCQlzY2FuZigiJWxsZCAlbGxkICVsbGQgJWxsZCIsJm4sJm0sJngsJnkpOwoJCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQkJc2NhbmYoIiVkIiwmYVtpXSk7CgkJfQoJCXNbMF09YVswXT0wOwoJCXNbMV09YVsxXTsKCQlmb3IoaW50IGk9MjtpPD1uO2krKyl7CgkJCXNbaV09KHNbaS0xXSthW2ldKSVtb2Q7CgkJCS8vY291dDw8c1tpXTw8IiAiOwoJCX0JCQoJCWxsIHgxLHkxOwoJCXgxID0gMSsoeC0xLjApL3Bvd2VyKDIsbSk7CgkJeTEgPSAxK2NlaWwoKHktMS4wKSoxLjAvcG93ZXIoMixtKSk7CQkKCQlsbCB0MCx0MSx0MjsKCQl0MD0oc1t5MV0tc1t4MS0xXSttb2QpJW1vZDsKCQkvL2NvdXQ8PHQwPDxlbmRsOwoJCXQxPSh0MCoyKSVtb2Q7CgkJdDE9KHQxLWFbeTFdK21vZCklbW9kOwoJCXQxPSh0MS1hW3gxXSttb2QpJW1vZDsKCQl0MT0odDEqY29lZmYobSkpJW1vZDsJCQoJCXQyPSh0MC1hW3gxXSttb2QpJW1vZDsKCQl0Mj0odDItYVt5MV0rbW9kKSVtb2Q7CgkJLy9jb3V0PDx0Mjw8ZW5kbDsKCQlsbCBzdW07CgkJc3VtPShtb2QrdDEtdDIpJW1vZDsKCQkvL2NvdXQ8PCJIb2xhICI8PHN1bTw8ZW5kbDsKCQlsbCBsaW1pdD0xK3Bvd2VyKDIsbSkqKHgxLTEpOwoJCXN1bT0obW9kK3N1bS1xdWVyeShsaW1pdCxsaW1pdCtwb3dlcigyLG0pLGxpbWl0LHgtMSxhW3gxXSxhW3gxKzFdLDApKSVtb2Q7CgkJLy9jb3V0PDxzdWI8PGVuZGw7CgkJbGltaXQ9MStwb3dlcigyLG0pKih5MS0xKTsKCQlzdW09KG1vZCtzdW0tcXVlcnkobGltaXQtcG93ZXIoMixtKSxsaW1pdCx5KzEsbGltaXQsYVt5MS0xXSxhW3kxXSwwKSklbW9kOwoJCS8vY291dDw8c3ViPDxlbmRsOwoJCQoJCXByaW50ZigiJWxsZFxuIiwoc3VtKSVtb2QpOwoJfQoJcmV0dXJuIDA7Cn0=