//jiudge: 26520: 1687343940
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll;
const long long mod=1e9+9;
string s;
ll qpow(ll x,ll n,ll mod)
{
ll res=1;
while(n>0)
{
if(n&1)res=res*x%mod;
x=x*x%mod;
n>>=1;
}
return res;
}
int main()
{
ll n,a,b,k;
cin>>n>>a>>b>>k;
cin>>s;
ll res=0;
for(int i=0;i<s.size();++i)
{
int flag;
s[i]=='+'?flag=1:flag=-1;
res= ((res+flag*qpow(a, n-i, mod) * qpow(b, i, mod) )% mod + mod) % mod;
}
ll t = qpow(b, k, mod) * qpow(a, k * (mod - 2), mod) % mod;
if (t == 1)
{
res = res * ((n + 1) / k) % mod;
}
else
{
res = res * (qpow(t, (n+1)/k, mod) - 1) % mod * qpow(t-1, mod - 2, mod) % mod;
}
cout<<res;
return 0;
}
1671D - Insert a Progression | 1671A - String Building |
1671B - Consecutive Points Segment | 1671C - Dolce Vita |
1669G - Fall Down | 4D - Mysterious Present |
1316B - String Modification | 1204A - BowWow and the Timetable |
508B - Anton and currency you all know | 1672A - Log Chopping |
300A - Array | 48D - Permutations |
677C - Vanya and Label | 1583B - Omkar and Heavenly Tree |
1703C - Cypher | 1511C - Yet Another Card Deck |
1698A - XOR Mixup | 1702E - Split Into Two Sets |
1703B - ICPC Balloons | 1702F - Equate Multisets |
1700A - Optimal Path | 665C - Simple Strings |
1708A - Difference Operations | 1703E - Mirror Grid |
1042A - Benches | 1676B - Equal Candies |
1705B - Mark the Dust Sweeper | 1711A - Perfect Permutation |
1701B - Permutation | 1692A - Marathon |