#include <bits/stdc++.h>
using namespace std;
template <typename T>
T Abs(T first) {
  return (first < 0 ? -first : first);
}
template <typename T>
T Sqr(T first) {
  return (first * first);
}
string plural(string s) {
  return (int((s).size()) && s[int((s).size()) - 1] == 'x' ? s + "en"
                                                           : s + "s");
}
const int INF = (int)1e9;
const long double EPS = 1e-9;
const long double PI = acos(-1.0);
bool Read(int &first) {
  char c, r = 0, n = 0;
  first = 0;
  for (;;) {
    c = getchar();
    if ((c < 0) && (!r)) return (0);
    if ((c == '-') && (!r))
      n = 1;
    else if ((c >= '0') && (c <= '9'))
      first = first * 10 + c - '0', r = 1;
    else if (r)
      break;
  }
  if (n) first = -first;
  return (1);
}
int main() {
  if (0) freopen("in.txt", "r", stdin);
  int N, R, C;
  int i, j, second, first;
  int y1, x1, y2, x2;
  int ns, nn;
  int oy, ox;
  int tot;
  static char S[500005];
  static int X[500005], Y[500005];
  static int Y1[500005], X1[500005], Y2[500005], X2[500005];
  static int seq[500005], nxt[500005];
  Read(N), Read(R), Read(C);
  scanf("%s", &S);
  second = first = y1 = x1 = y2 = x2 = 0;
  for (i = 0; i < N; i++) {
    if (S[i] == 'U') second--;
    if (S[i] == 'D') second++;
    if (S[i] == 'L') first--;
    if (S[i] == 'R') first++;
    X[i + 1] = first;
    Y[i + 1] = second;
    Y1[i + 1] = min(Y1[i], second);
    X1[i + 1] = min(X1[i], first);
    Y2[i + 1] = max(Y2[i], second);
    X2[i + 1] = max(X2[i], first);
  }
  int dy = Y2[N] - Y1[N];
  int dx = X2[N] - X1[N];
  int fx = first;
  int fy = second;
  if ((second == 0) && (first == 0) && (dy < R) && (dx < C)) {
    printf("-1\n");
    return (0);
  }
  int ans = 0;
  ns = 0;
  for (i = 1; i <= N; i++) seq[ns++] = i;
  oy = ox = 0;
  tot = 0;
Rep:;
  nn = 0;
  for (i = 0; i < ns; i++) {
    j = seq[i];
    second = Y[j] + oy;
    first = X[j] + ox;
    if ((second < y1) || (second > y2)) {
      y1 = min(y1, second);
      y2 = max(y2, second);
      ans = (ans + (long long)(tot + j) * C) % 1000000007;
      R--;
      if (!R) goto Done;
      nxt[nn++] = j;
    } else if ((first < x1) || (first > x2)) {
      x1 = min(x1, first);
      x2 = max(x2, first);
      ans = (ans + (long long)(tot + j) * R) % 1000000007;
      C--;
      if (!C) goto Done;
      nxt[nn++] = j;
    }
  }
  ns = nn;
  memcpy(seq, nxt, sizeof(int) * ns);
  oy += fy;
  ox += fx;
  tot = (tot + (long long)N) % 1000000007;
  goto Rep;
Done:;
  printf("%d\n", ans);
  return (0);
}
