# include <bits/stdc++.h>
#pragma GCC optimize("Ofast")

# define pb push_back
# define fr first
# define sc second
# define mk make_pair

using namespace std;

const long long linf = 1e18 + 7;
const int inf = 1e9 + 7;
const int N = 1e3 + 5;

typedef long long ll;

int n, m, a, b, x, y, bl;
char ans[N][N];

void Clear(){

      for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= m; j ++){
                  if(!bl)
                        ans[i][j] = '.';
                  else {
                        if(i <= 3){
                              if(j <= 3) continue;
                              ans[i][j] = '.';
                        } else{
                              ans[i][j] = '.';
                        }
                  }
            }
}

void output(){
      puts("YES");
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m; j ++)
                  printf("%c", ans[i][j]);
            puts("");
      }
      exit(0);
}

void f(){
      Clear();
      x = a, y = b;
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m; j ++){
                  if(ans[i][j] == '.' && a > 0){
                        if(j + 1 <= m && ans[i][j + 1] == '.'){
                              ans[i][j] = '<';
                              ans[i][j + 1] = '>';
                              a --;
                        }
                  }
            }
      }
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m;j ++){
                  if(b > 0){
                        if(ans[i][j] == '.' && i + 1 <= n && ans[i + 1][j] == '.'){
                              ans[i][j] = '^';
                              ans[i + 1][j] = 'v';
                              b --;
                        }
                  }
            }
      }
      if(a == 0 && b == 0)
            output();
      Clear();
      a = x, b = y;
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m;j ++){
                  if(b > 0){
                        if(ans[i][j] == '.' && i + 1 <= n && ans[i + 1][j] == '.'){
                              ans[i][j] = '^';
                              ans[i + 1][j] = 'v';
                              b --;
                        }
                  }
            }
      }
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m; j ++){
                  if(ans[i][j] == '.' && a > 0){
                        if(j + 1 <= m && ans[i][j + 1] == '.'){
                              ans[i][j] = '<';
                              ans[i][j + 1] = '>';
                              a --;
                        }
                  }
            }
      }
      if(a == 0 && b == 0)
            output();

      Clear();
      a = x, b = y;
      for(int j = 1; j <= m; j ++){
            for(int i = 1; i <= n; i ++){
                  if(ans[i][j] == '.' && a > 0){
                        if(j + 1 <= m && ans[i][j + 1] == '.'){
                              ans[i][j] = '<';
                              ans[i][j + 1] = '>';
                              a --;
                        }
                  }
            }
      }
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m;j ++){
                  if(b > 0){
                        if(ans[i][j] == '.' && i + 1 <= n && ans[i + 1][j] == '.'){
                              ans[i][j] = '^';
                              ans[i + 1][j] = 'v';
                              b --;
                        }
                  }
            }
      }
      if(a == 0 && b == 0)
            output();
      Clear();
      a = x, b = y;
      for(int j = 1; j <= m; j ++){
            int i = 1;
            if(ans[i][j] == '.' && a > 0){
                  if(j + 1 <= m && ans[i][j + 1] == '.'){
                        ans[i][j] = '<';
                        ans[i][j + 1] = '>';
                        a --;
                  }
            }
      }
      for(int j = 1; j <= m; j ++){
            for(int i = 1; i <= n; i ++){
                  if(ans[i][j] == '.' && a > 0){
                        if(j + 1 <= m && ans[i][j + 1] == '.'){
                              ans[i][j] = '<';
                              ans[i][j + 1] = '>';
                              a --;
                        }
                  }
            }
      }
      for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= m;j ++){
                  if(b > 0){
                        if(ans[i][j] == '.' && i + 1 <= n && ans[i + 1][j] == '.'){
                              ans[i][j] = '^';
                              ans[i + 1][j] = 'v';
                              b --;
                        }
                  }
            }
      }
      if(a == 0 && b == 0)
            output();
      a = x, b = y;
}

int main(){
      cin >> n >> m >> a >> b;

      if(n / 2 * m < b){
            puts("NO");
            return 0;
      }
      if(m / 2 * n < a){
            puts("NO");
            return 0;
      }

      if(n * m < a * 2 + b * 2){
            puts("NO");
            return 0;
      }

      f();
      bl = 1;
      if(n * m - x * 2 - y * 2 == 1 && n > 2 && m > 2 && n % 2 == 1 && m % 2 == 1) {
            ans[1][1] = '^', ans[1][2] = '<', ans[1][3] = '>';
            ans[2][1] = 'v', ans[2][2] = '.', ans[2][3] = '^';
            ans[3][1] = '<', ans[3][2] = '>', ans[3][3] = 'v';
            a -= 2, b -= 2;
            f();
      }

      puts("NO");
}


Measured memory_bytes: 2176