#include <bits/stdc++.h>
using namespace std;
long long Read() {
  long long Output = 0, W = 1;
  char Input = getchar();
  while (Input < '0' || Input > '9') {
    if (Input == '-') W = -1;
    Input = getchar();
  }
  while (Input >= '0' && Input <= '9') {
    Output = (Output << 3) + (Output << 1) + Input - '0';
    Input = getchar();
  }
  return Output * W;
}
const long long Inf = 5e15;
const long long Mod = 1e9 + 7;
int N;
long long W[11];
long long Count[11][500001];
int Total[11];
int Min[11];
int Max[11];
long long Copy[500001];
long long Ans;
long long Prefix[500001];
char Mode[500001];
int Check(int Num, int Pos) {
  if (Num < 1 || Num > W[Pos]) return 0;
  return Num;
}
int main() {
  N = Read();
  for (int i = 1; i <= 2; ++i) W[i] = Read();
  for (int i = 1; i <= 2; ++i)
    for (int j = 0; j <= W[i]; ++j) Count[i][j] = Inf;
  scanf("%s", Mode + 1);
  for (long long i = 1; i <= N; ++i) {
    int C, D;
    if (Mode[i] == 'R') {
      D = 1;
      C = 2;
    } else if (Mode[i] == 'L') {
      D = -1;
      C = 2;
    } else if (Mode[i] == 'U') {
      D = 1;
      C = 1;
    } else {
      D = -1;
      C = 1;
    }
    Total[C] += D;
    if (Total[C] > Max[C]) {
      Count[C][W[C] - Total[C] + 1] = min(Count[C][W[C] - Total[C] + 1], i);
      Max[C] = Total[C];
    }
    if (Total[C] < Min[C]) {
      Count[C][-Total[C]] = min(Count[C][-Total[C]], i);
      Min[C] = Total[C];
    }
  }
  int PD = 0;
  for (int i = 1; i <= 2; ++i)
    if (!Total[i] && Max[i] - Min[i] < W[i]) ++PD;
  if (PD == 2) {
    printf("-1");
    return 0;
  }
  for (int i = 1; i <= 2; ++i) {
    for (int j = -Min[i] + 1; j <= W[i] - Max[i]; ++j)
      Count[i][j] = Count[i][Check(j + Total[i], i)] + N;
    for (int j = W[i] - Max[i]; j >= -Min[i] + 1; --j)
      Count[i][j] = min(Count[i][j], Count[i][Check(j + Total[i], i)] + N);
  }
  sort(Count[2] + 1, Count[2] + W[2] + 1);
  for (int i = 1; i <= W[2]; ++i) {
    Copy[i] = Count[2][i];
    Prefix[i] = Prefix[i - 1] + Count[2][i];
  }
  int Lon = unique(Copy + 1, Copy + W[2] + 1) - Copy - 1;
  for (int i = 1; i <= W[1]; ++i) {
    int Same = lower_bound(Copy + 1, Copy + Lon + 1, Count[1][i]) - Copy;
    Ans = ((Ans + Prefix[Same - 1]) % Mod + (W[2] - Same + 1) * Count[1][i]) %
          Mod;
  }
  printf("%lld", Ans);
  return 0;
}
