#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 5;
const long long mod = 1e9 + 9;
const int INF = 0x3f3f3f3f;
const double eps = 1e-8;
long long quick(long long a, long long b) {
  long long ans = 1;
  a %= mod;
  while (b) {
    if (b & 1) ans = (ans * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return ans;
}
long long quick1(long long a, long long b) {
  long long ans = 0;
  a %= mod;
  while (b) {
    if (b & 1) ans = (ans + a) % mod;
    a = (a + a) % mod;
    b >>= 1;
  }
  return ans;
}
int main() {
  long long n, k;
  long long a, b;
  char s[N];
  scanf("%I64d%I64d%I64d%I64d%s", &n, &a, &b, &k, s + 1);
  long long temp, aa, bb;
  long long sum = 0, ans = 0;
  for (long long i = 1; i <= k; i++) {
    temp = quick(a, n - i + 1) * quick(b, i - 1);
    if (s[i] == '+') {
      sum += temp;
    } else {
      sum -= temp;
    }
    sum = (sum + mod) % mod;
  }
  aa = quick(a, k);
  bb = quick(b, k);
  aa = quick(aa, mod - 2);
  temp = quick1(bb, aa);
  if (temp == 1) {
    ans = quick1(sum, (n + 1) / k);
    cout << ans << endl;
    return 0;
  }
  aa = quick(temp, (n + 1) / k) - 1;
  aa = (aa + mod) % mod;
  bb = temp - 1;
  bb = (bb + mod) % mod;
  bb = quick(bb, mod - 2);
  temp = quick1(aa, bb);
  ans = quick1(sum, temp);
  ans = (ans + mod) % mod;
  printf("%I64d\n", ans);
  return 0;
}
