#include<bits/stdc++.h>
using namespace std;
char s[1000100];
int n,y,i,j,T,a[1000100],b[1000100];
long long ans,x,dp[1000100],k;
char ch;
void read(long long &x){
x=0;
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
}
int main(){
freopen("angry.in","r",stdin);
freopen("angry.out","w",stdout);
scanf("%s",s);
n=0;y=1;
for(i=strlen(s)-1;i>=0;i--)
n+=(s[i]-48)*y,y*=2;
a[1]=0;T=1;
while(T<n){
for(i=1;i<=T;i++)
b[i]=1-a[i];
for(i=T+1;i<=T*2;i++)
a[i]=b[i-T];
T*=2;
}
read(k);
for(i=1;i<=k;i++) read(dp[i]);
for(i=0;i<n;i++)
if(a[i+1]==1){
x=1;
for(j=1;j<=k;j++)
ans=(ans%1000000007+dp[j]%1000000007*x%1000000007)%1000000007,x=(x%1000000007*i%1000000007)%1000000007;
}
printf("%lld\n",ans);
return 0;
}```
这样能对多少呀