#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long maxn = 5e5 + 10;
char str[maxn];
int high[2], low[2], cur[2], dim[2];
int n;
long long ans;
bool process(long long step, bool isf) {
  int tt = step % n;
  if (step != 0 && tt == 0 && cur[0] == 0 && cur[1] == 0) {
    printf("-1\n");
    exit(0);
  }
  if (str[tt] == 'L')
    isf ? cur[0] = high[0] + 1 : ++cur[0];
  else if (str[tt] == 'R')
    isf ? cur[0] = low[0] - 1 : --cur[0];
  else if (str[tt] == 'D')
    isf ? cur[1] = high[1] + 1 : ++cur[1];
  else if (str[tt] == 'U')
    isf ? cur[1] = low[1] - 1 : --cur[1];
  bool del = false;
  for (int i = 0; i < 2; i++) {
    if (cur[i] < low[i] || cur[i] > high[i]) {
      ans = (ans + (step + 1) * dim[i ^ 1]) % mod;
      --dim[i];
      del = true;
    }
    low[i] = min(cur[i], low[i]);
    high[i] = max(cur[i], high[i]);
  }
  return del;
}
bool judge() { return dim[0] > 0 && dim[1] > 0; }
int main() {
  scanf("%d%d%d", &n, &dim[1], &dim[0]);
  scanf("%s", str);
  for (int i = 0; i < n && judge(); i++) process(i, false);
  vector<int> vec;
  for (int i = 0; i < n && judge(); i++)
    if (process(i + n, false)) vec.push_back(i);
  for (long long k = 2; judge(); k++)
    for (int i = 0; i < vec.size(); i++)
      if (judge()) process(vec[i] + k * n, true);
  printf("%I64d\n", ans);
  return 0;
}
