3
2 1 1
 6
6 2 6 2 4 2
 2
1 2
 8
2 1 2 2 6 5 6 6
 18
2 3 4 5 2 7 8 9 10 7 11 12 14 15 13 17 18 18
 7
1 2 3 4 5 6 7
 7
4 3 2 6 3 5 2
 7
7 5 3 1 2 1 5
 7
1 6 4 4 5 6 7

1
2 2 1  0
6 2 6 2 4 2  1 
1 1 
 2 
2 2 2 2 6 2 6 6 
 5 
2 3 4 5 11 7 8 9 10 11 11 11 14 15 11 17 18 11 
 6 
1 1 1 1 1 1 1 
 1
4 3 3 6 3 5 2  1
7 5 3 1 3 1 5  4 
1 6 4 1 1 1 1 

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5 + 5;
int to[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
long long bx, by, ex, ey;
int n;
char temp[maxn];
struct Add {
  long long nx, ny;
} add[maxn];
int f(char c) {
  if ('U' == c) return 2;
  if ('D' == c) return 3;
  if ('L' == c) return 1;
  if ('R' == c) return 0;
}
bool isok(long long m) {
  long long bbx = bx, bby = by;
  long long k = m % n;
  bbx += m / (long long)n * add[n].nx, bby += m / (long long)n * add[n].ny;
  bbx += add[k].nx, bby += add[k].ny;
  long long len = abs(abs(bbx) - abs(ex)) + abs(abs(bby) - abs(ey));
  if (len <= m)
    return true;
  else
    return false;
}
int main() {
  cin >> bx >> by >> ex >> ey;
  scanf("%d", &n);
  scanf("%s", temp + 1);
  for (int i = 1; i <= n; i++) {
    int m = f(temp[i]);
    add[i].nx = add[i - 1].nx + to[m][0], add[i].ny = add[i - 1].ny + to[m][1];
  }
  long long l = 0, r = 1e18, ans = -1;
  while (l <= r) {
    long long mid = (r + l) >> 1;
    if (isok(mid)) {
      r = mid - 1;
      ans = mid;
    } else {
      l = mid + 1;
    }
  }
  cout << ans;
  return 0;
}
