#include <bits/stdc++.h>
using namespace std;
int N, M, A, B; 
char C[1010][1010]; 
bool ok = false; 
void solve1(){
	if((A+1)/2 + (B+1)/2 > N*M/4) return; 
	ok = true; 
	int a = 0; int b = 0; 
	for(int i = 0; i < N; i+=2){			
		for(int j = 0; j < M; j+=2){
			if(a < A){
				C[i][j] = '<'; C[i][j+1] = '>'; a++; 
				if(a < A){
					C[i+1][j] = '<'; C[i+1][j+1] = '>'; a++; 
				}
			}
			else if(a == A && b < B){
				C[i][j] = '^'; C[i+1][j] = 'v'; b++; 
				if(a == A && b < B){
					C[i][j+1] = '^'; C[i+1][j+1] = 'v'; b++; 
				}                 
			}
		}
	}
}
void solve2(){
	if((A+1)/2 * 2 + B > N*M/2 || A > M/2*N) return; 
	ok = true; 
	int a = 0; int b = 0; 
	for(int i = 0; i < N-1; i+=2){			
		for(int j = 0; j < M-1; j+=2){
			if(a < A){
				C[i][j] = '<'; C[i][j+1] = '>'; a++; 
				if(a < A){
					C[i+1][j] = '<'; C[i+1][j+1] = '>'; a++; 
				}
			}
			else if(a == A && b < B){
				C[i][j] = '^'; C[i+1][j] = 'v'; b++; 
				if(a == A && b < B){
					C[i][j+1] = '^'; C[i+1][j+1] = 'v'; b++; 
				}              
			}
		}
	}
	for(int i = 0; i < N-1; i+=2){
		if(a == A && b < B){
			C[i][M-1] = '^'; C[i+1][M-1] = 'v'; b++; 
		}
	}
}
void solve3(){
	if(A > M/2*N || B > N/2*M || A+B > M*N/2) return; 
	ok = true; 
	int a = 0; int b = 0; 
	for(int i = 0; i < N-3; i+=2){
		if(b < B){
			C[i][M-1] = '^'; C[i+1][M-1] = 'v'; b++; 
		}
	}
	for(int j = 0; j < M-3; j+=2){
		if(a < A){
			C[N-1][j] = '<'; C[N-1][j+1] = '>'; a++; 
		}
	}
	for(int i = 0; i < N-1; i+=2){
		for(int j = 0; j < M-1; j+=2){
			if(a < A-2){
				C[i][j] = '<'; C[i][j+1] = '>';
				C[i+1][j] = '<'; C[i+1][j+1] = '>'; a+= 2;
			}
			else if(b < B-2){
				C[i][j] = '^'; C[i+1][j] = 'v';
				C[i][j+1] = '^'; C[i+1][j+1] = 'v'; b += 2;             
			}
		}
	}
	if(a < A){
		C[N-1][M-3] = '<'; C[N-1][M-2] = '>'; a++; 
	}
	if(b < B){
		C[N-3][M-1] = '^'; C[N-2][M-1] = 'v'; b++; 
	}
	if(a == A && b == B) return; 
	for(int i = 0; i < N; i++){			
		for(int j = 0; j < M; j++){
			C[i][j] = '.'; 	
		}
	}
	a = 0; b = 0; 
	for(int i = 0; i < N-3; i+=2){
		if(b < B){
			C[i][M-1] = '^'; C[i+1][M-1] = 'v'; b++; 
		}
	}
	for(int j = 0; j < M-3; j+=2){
		if(a < A){
			C[N-1][j] = '<'; C[N-1][j+1] = '>'; a++; 
		}
	}
	for(int i = 0; i < N-1; i+=2){
		for(int j = 0; j < M-1; j+=2){
			if(i >= N-3 && j >= M-3) continue; 
			if(a < A-2){
				C[i][j] = '<'; C[i][j+1] = '>';
				C[i+1][j] = '<'; C[i+1][j+1] = '>'; a += 2; 
			}
			else if(b < B-2){
				C[i][j] = '^'; C[i+1][j] = 'v'; 
				C[i][j+1] = '^'; C[i+1][j+1] = 'v'; b += 2;              
			}
		}
	}
	if(a < A){
		C[N-3][M-3] = '<'; C[N-3][M-2] = '>'; a++; 
	}
	if(a < A){
		C[N-1][M-2] = '<'; C[N-1][M-1] = '>'; a++; 
	}
	if(b < B){
		C[N-3][M-1] = '^'; C[N-2][M-1] = 'v'; b++; 
	}
	if(b < B){
		C[N-2][M-3] = '^'; C[N-1][M-3] = 'v'; b++; 
	}
}
int main(){
	cin >> N >> M >> A >> B; 
	for(int i = 0; i < N; i++){			
		for(int j = 0; j < M; j++){
			C[i][j] = '.'; 	
		}
	}
	if(N % 2 == 0 && M % 2 == 0) solve1(); 
	else if(N % 2 == 0 && M % 2 == 1) solve2();
	else if(N % 2 == 1 && M % 2 == 0){
		swap(A, B); swap(M, N); 
		solve2(); swap(M, N);
		char D[1010][1010] = {}; 
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				D[i][j] = C[j][i]; 
			}
		}
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				if(D[i][j] == '<') C[i][j] = '^'; 
				if(D[i][j] == '>') C[i][j] = 'v';
				if(D[i][j] == '^') C[i][j] = '<';
				if(D[i][j] == 'v') C[i][j] = '>';
				if(D[i][j] == '.') C[i][j] = '.';
			}
		}
	}
	else if(N % 2 == 1 && M % 2 == 1) solve3();
	cout << (ok ? "YES" : "NO") << endl; 
	if(ok){
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				cout << C[i][j]; 
			}
			cout << endl; 
		}
	} 	 
}

Measured memory_bytes: 2560