#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>

using namespace std;

int main()
{
	int n, m, a, b;
	scanf("%d %d %d %d", &n, &m, &a, &b);
	char s[1000][1000];
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			s[i][j]='.';
		}
	}
	if(n%2==0){
		if(a%2==0){
			if(m/2*n<a || m*n<2*(a+b)){
				printf("%s\n", "NO");
				return 0;
			}else{
				printf("%s\n", "YES");
				for(int j=0; j<m/2; j++){
					if(a==0) break;
					for(int i=0; i<n; i++){
						if(a==0) break;
						s[i][2*j]='<';
						s[i][2*j+1]='>';
						a--;
					}
				}
				for(int j=0; j<m; j++){
					if(b==0) break;
					for(int i=0; i<n/2; i++){
						if(b==0) break;
						if(s[2*i][j]=='.'){
							s[2*i][j]='^';
							s[2*i+1][j]='v';
							b--;
						}
					}
				}
			}
		}else{
			if(m/2*n<a || m*n-2<2*(a+b)){
				printf("%s\n", "NO");
				return 0;
			}else{
				printf("%s\n", "YES");
				for(int j=0; j<m/2; j++){
					if(a==0) break;
					for(int i=0; i<n; i++){
						if(a==0) break;
						s[i][2*j]='<';
						s[i][2*j+1]='>';
						a--;
					}
				}
				for(int j=0; j<m; j++){
					if(b==0) break;
					for(int i=0; i<n/2; i++){
						if(b==0) break;
						if(s[2*i][j]=='.'){
							s[2*i][j]='^';
							s[2*i+1][j]='v';
							b--;
						}
					}
				}
			}
		}
	}else{
		int a0=0;
		for(int j=0; j<m/2; j++){
			if(a==0) break;
			s[0][2*j]='<';
			s[0][2*j+1]='>';
			a--;
			a0++;
		}
		if(m%2==0){
		if((n-1)*(m/2)<a || (a%2==0 && m*(n-1)<2*(a+b)) || (a%2!=0 && m*(n-1)-2<2*(a+b))){
			printf("%s\n", "NO");
			return 0;
		}else{
			printf("%s\n", "YES");
			for(int j=0; j<m/2; j++){
				if(a==0) break;
				for(int i=1; i<n; i++){
					if(a==0) break;
					s[i][2*j]='<';
					s[i][2*j+1]='>';
					a--;
				}
			}
			for(int j=0; j<m; j++){
				if(b==0) break;
				for(int i=0; i<(n-1)/2; i++){
					if(b==0) break;
					if(s[2*i+1][j]=='.'){
						s[2*i+1][j]='^';
						s[2*i+2][j]='v';
						b--;
					}
				}
			}
		}
		}else{
		if((n-1)*(m/2)<a || (a%2==0 && m*(n-1)<2*(a+b)) || (a%2!=0 && m*(n-1)<2*(a+b))){
			printf("%s\n", "NO");
			return 0;
		}else{
			printf("%s\n", "YES");
			if(a%2==0){
			for(int j=0; j<m/2; j++){
				if(a==0) break;
				for(int i=1; i<n; i++){
					if(a==0) break;
					s[i][2*j]='<';
					s[i][2*j+1]='>';
					a--;
				}
			}
			for(int j=0; j<m; j++){
				if(b==0) break;
				for(int i=0; i<(n-1)/2; i++){
					if(b==0) break;
					if(s[2*i+1][j]=='.'){
						s[2*i+1][j]='^';
						s[2*i+2][j]='v';
						b--;
					}
				}
			}
			}else{
			if(a>0){
				s[n-1][m-2]='<';
				s[n-1][m-1]='>';
				a--;
			}
			for(int j=0; j<m/2; j++){
				if(a==0) break;
				for(int i=1; i<n; i++){
					if(a==0) break;
					s[i][2*j]='<';
					s[i][2*j+1]='>';
					a--;
				}
			}
			for(int j=0; j<m; j++){
				if(b==0) break;
				for(int i=0; i<(n-1)/2; i++){
					if(j!=m-1){
					if(b==0) break;
					if(s[2*i+1][j]=='.' && s[2*i+2][j]=='.'){
						s[2*i+1][j]='^';
						s[2*i+2][j]='v';
						b--;
					}
					}else{
					if(b==0) break;
					if(s[2*i][j]=='.' && s[2*i+1][j]=='.'){
						s[2*i][j]='^';
						s[2*i+1][j]='v';
						b--;
					}
					}
				}
			}
			}
		}
		}
	}
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			printf("%c", s[i][j]);
		}
		printf("\n");
	}
	return 0;
}

Measured memory_bytes: 2048