#include <bits/stdc++.h>

using namespace std;

#define X first
#define Y second
#define mp make_pair
#define pb push_back
#define Debug(...) fprintf(stderr, __VA_ARGS__)

typedef long long LL;
typedef long double LD;
typedef unsigned int uint;
typedef pair <int, int> pii;
typedef unsigned long long uLL;

template <typename T> inline void Read(T &x) {
  char c = getchar();
  bool f = false;
  for (x = 0; !isdigit(c); c = getchar()) {
    if (c == '-') {
      f = true;
    }
  }
  for (; isdigit(c); c = getchar()) {
    x = x * 10 + c - '0';
  }
  if (f) {
    x = -x;
  }
}

template <typename T> inline bool CheckMax(T &a, const T &b) {
  return a < b ? a = b, true : false;
}

template <typename T> inline bool CheckMin(T &a, const T &b) {
  return a > b ? a = b, true : false;
}

const int N = 1005;

int n, m, a, b;
char s[N][N];

inline void A(int x, int y) {
  if (a) {
    s[x][y] = '<', s[x][y + 1] = '>', --a;
  }
}

inline void B(int x, int y) {
  if (b) {
    s[x][y] = '^', s[x + 1][y] = 'v', --b;
  }
}

int main() {
#ifdef wxh010910
  freopen("d.in", "r", stdin);
#endif
  Read(n), Read(m), Read(a), Read(b);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      s[i][j] = '.';
    }
  }
  if ((n & 1) && (m & 1) && n >= 3 && m >= 3) {
    for (int i = 1; i < m; i += 2) {
      A(n, i);
    }
    for (int i = 2; i < n; i += 2) {
      B(i, m);
    }
    bool flg = false;
    if (a & 1) {
      A(1, m - 1), B(1, m - 2), flg = true;
    }
    for (int i = 1; i < n; i += 2) {
      for (int j = 1; j < m; j += 2) {
        if (i == 1 && j == m - 2 && flg) {
          continue;
        }
        if (a) {
          A(i, j), A(i + 1, j);
        } else if (b) {
          B(i, j), B(i, j + 1);
        }
      }
    }
  } else {
    if (n & 1) {
      for (int i = 1; i < m; i += 2) {
        A(n, i);
      }
    }
    if (m & 1) {
      for (int i = 1; i < n; i += 2) {
        B(i, m);
      }
    }
    for (int i = 1; i < n; i += 2) {
      for (int j = 1; j < m; j += 2) {
        if (a) {
          A(i, j), A(i + 1, j);
        } else if (b) {
          B(i, j), B(i, j + 1);
        }
      }
    }
  }
  if (a || b) {
    puts("NO");
  } else {
    puts("YES");
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= m; ++j) {
        putchar(s[i][j]);
      }
      putchar(10);
    }
  }
#ifdef wxh010910
  Debug("My Time: %.3lfms\n", (double)clock() / CLOCKS_PER_SEC);
#endif
  return 0;
}
