#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int s = 0, t = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') t = -1;
    c = getchar();
  }
  while (isdigit(c)) s = s * 10 + c - 48, c = getchar();
  return s * t;
}
const int N = 500005, p = 1e9 + 7;
inline void Min(int &x, int v) {
  if (x > v) x = v;
}
inline void Max(int &x, int v) {
  if (x < v) x = v;
}
vector<int> v;
int n, l[2], hig[2], low[2], cur[2];
char c[N];
long long ans = 0;
inline bool game(long long x, bool flag) {
  if (x != 0 && x % n == 0 && !cur[0] && !cur[1]) puts("-1"), exit(0);
  int t = x % n;
  if (!flag) {
    if (c[t] == 'L') cur[0]--;
    if (c[t] == 'R') cur[0]++;
    if (c[t] == 'U') cur[1]--;
    if (c[t] == 'D') cur[1]++;
  } else {
    if (c[t] == 'L') cur[0] = low[0] - 1;
    if (c[t] == 'R') cur[0] = hig[0] + 1;
    if (c[t] == 'U') cur[1] = low[1] - 1;
    if (c[t] == 'D') cur[1] = hig[1] + 1;
  }
  bool Flag = 0;
  for (register int i = 0; i <= 1; i++) {
    if (cur[i] < low[i] || cur[i] > hig[i]) {
      ans = (ans + (x + 1) % p * l[i] % p) % p, l[i ^ 1]--;
      Flag = 1;
    }
    Min(low[i], cur[i]);
    Max(hig[i], cur[i]);
  }
  return Flag;
}
inline bool in() { return l[0] > 0 && l[1] > 0; }
int main() {
  n = read(), l[0] = read(), l[1] = read();
  scanf("%s", c);
  for (register int i = 0; in() && i < n; i++) game(i, 0);
  for (register int i = n; in() && i < (n << 1); i++)
    if (game(i, 0)) v.push_back(i % n);
  for (register long long k = 2; in(); k++)
    for (vector<int>::iterator it = v.begin(); in() && it != v.end(); it++)
      game(k * n + *it, 1);
  cout << ans << endl;
  return 0;
}
