#include <bits/stdc++.h>
const double PI = acos(-1.0);
using namespace std;
int setb(int n, int pos) { return n = n | (1 << pos); }
int resb(int n, int pos) { return n = n & ~(1 << pos); }
bool checkb(int n, int pos) { return (bool)(n & (1 << pos)); }
long long bigmod(long long b, long long p, long long m) {
  if (p == 0) return 1;
  long long ret = bigmod(b, p / 2, m);
  ret = (ret * ret) % m;
  if (p & 1) ret = (ret * b) % m;
  return ret;
}
char str[1000005];
long long n, k, a, b;
long long brute() {
  long long ret = 0;
  for (int i = 0; i <= n; i++) {
    long long my = bigmod(a, n - i, 1000000009) * bigmod(b, i, 1000000009);
    my %= 1000000009;
    if (str[i % k] == '-') my = -my;
    ret += my;
  }
  ret %= 1000000009;
  if (ret < 0) ret += 1000000009;
  return ret;
}
inline long long Inverse(long long x) {
  return bigmod(x, 1000000009 - 2, 1000000009);
}
long long go(long long f, long long r, long long p) {
  long long lob = 1 - bigmod(r, p, 1000000009);
  if (lob < 0) lob += 1000000009;
  long long hor = 1 - r;
  if (hor < 0) hor += 1000000009;
  long long val = (lob * Inverse(hor)) % 1000000009;
  if (r == 1) val = p;
  return (f * val) % 1000000009;
}
int main() {
  scanf("%lld %lld %lld", &n, &a, &b);
  scanf("%lld", &k);
  scanf("%s", str);
  long long gap =
      (Inverse(bigmod(a, k, 1000000009)) * bigmod(b, k, 1000000009)) %
      1000000009;
  long long item = (n + 1) / k;
  long long ret = 0;
  for (int i = 0; i < k; i++) {
    long long frst =
        (bigmod(a, n - i, 1000000009) * bigmod(b, i, 1000000009)) % 1000000009;
    long long my = go(frst, gap, item);
    if (str[i] == '-') my = -my;
    ret += my;
  }
  ret %= 1000000009;
  if (ret < 0) ret += 1000000009;
  printf("%lld", ret);
  printf("\n");
  return 0;
}
