#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
template <class T>
using vec = vector<T>;
template <class T>
using v2d = vector<vector<T>>;
template <class T>
using v3d = vector<vector<vector<T>>>;
template <class T>
using v4d = vector<vector<vector<vector<T>>>>;
template <class T>
using prq = priority_queue<T>;
template <class T>
using rpq = priority_queue<T, vector<T>, greater<T>>;
const ll INF = 1e18;
const vec<pair<int, int>> MV = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
int get_idx(char c) {
  switch (c) {
    case 'U':
      return 0;
    case 'D':
      return 1;
    case 'L':
      return 2;
    case 'R':
      return 3;
  }
  return -1;
}
int n, xa, ya, xb, yb;
vec<pair<int, int>> moves;
ll dist(ll ax, ll ay, ll bx, ll by) { return abs(ax - bx) + abs(ay - by); }
bool ok(ll val) {
  ll x = xa, y = ya;
  ll full = val / n;
  ll left = val % n;
  for (int i = 0; i < n; ++i) {
    auto& [dx, dy] = moves[i];
    ll times = full + (i < left);
    x += times * dx;
    y += times * dy;
  }
  return dist(x, y, xb, yb) <= val;
}
int main() {
  scanf("%d %d %d %d", &xa, &ya, &xb, &yb);
  scanf("%d", &n);
  getchar();
  moves.assign(n, {});
  for (int i = 0; i < n; ++i) {
    moves[i] = MV[get_idx(getchar())];
  }
  ll ans = 0;
  for (ll i = INF; i > 0; i >>= 1) {
    while (ans + i < INF && !ok(ans + i)) {
      ans += i;
    }
  }
  ++ans;
  printf("%lld\n", ans < INF ? ans : -1);
}
