#include<iostream>
#include<string>
#include<cmath>
#include<cstdio>
using namespace std;
int main(){
freopen("angry.in","r",stdin);
freopen("angry.out","w",stdout);
char f[32];
int n=0;
unsigned long long ans=0;
while((f[ans]=getchar())!='\n'){
n=n*2+(f[ans]-48);
ans++;
}
ans=0;
string s="a",t;t.clear();
while(ans<=n){
for(int i=0;i<s.length();i++){
if(s[i]=='a'){
t+='b';
}else{
t+='a';
}
}
s+=t;
ans+=t.length();
t.clear();
}
ans=0;
int k;cin>>k;
int a[k];
for(int i=0;i<k;i++)cin>>a[i];
for(int i=0;i<n;i++){
if(s[i]=='a')continue;
else{
ans+=a[0];
for(int j=1;j<k;j++){
ans+=a[j]*pow(double(i),double(j));
}
}
}
cout<<ans%1000000007;
return 0;
}
阿巴阿巴看题看啊我这道题NOI提交上去是不是没分了啊