#include <bits/stdc++.h>
// iostream is too mainstream
#include <cstdio>
// bitch please
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <list>
#include <cmath>
#include <iomanip>
#include <time.h>
#define dibs reserve
#define OVER9000 1234567890
#define ALL_THE(CAKE,LIE) for(auto LIE =CAKE.begin(); LIE != CAKE.end(); LIE++)
#define tisic 47
#define soclose 1e-8
#define chocolate win
// so much chocolate
#define patkan 9
#define ff first
#define ss second
#define abs(x) ((x < 0)?-(x):x)
#define uint unsigned int
#define dbl long double
#define pi 3.14159265358979323846
using namespace std;
// mylittledoge

#ifdef DONLINE_JUDGE
	// palindromic tree is better than splay tree!
	#define lld I64d
#endif

int main() {
	cin.sync_with_stdio(0);
	cin.tie(0);
	cout << fixed << setprecision(10);
	int N, M, A, B;
	cin >> N >> M >> A >> B;
	int A0 = A, B0 = B;
	if(2*(A+B) > N*M) {
		cout << "NO\n";
		return 0;
	}
	int C =N*M-2*(A+B);

	if(N%2 == 0 && M%2 == 0) {
		if(A%2 != 0 && B%2 != 0 && C == 0) {
			cout << "NO\n";
			return 0;
		}
		cout << "YES\n";
		vector<string> S(N);
		for(int i =0; i < N/2; i++) for(int j =0; j < M/2; j++) {
			if(A > 1) {
				A -=2;
				S[2*i] +='<';
				S[2*i] +='>';
				S[2*i+1] +='<';
				S[2*i+1] +='>';
			}
			else if(B > 1) {
				B -=2;
				S[2*i] +='^';
				S[2*i] +='^';
				S[2*i+1] +='v';
				S[2*i+1] +='v';
			}
			else if(A > 0) {
				A--;
				S[2*i] +='<';
				S[2*i] +='>';
				S[2*i+1] +='.';
				S[2*i+1] +='.';
			}
			else if(B > 0) {
				B--;
				S[2*i] +='^';
				S[2*i] +='.';
				S[2*i+1] +='v';
				S[2*i+1] +='.';
			}
			else {
				S[2*i] +='.';
				S[2*i] +='.';
				S[2*i+1] +='.';
				S[2*i+1] +='.';
			}
		}
		for(int i =0; i < N; i++) cout << S[i] << "\n";
		return 0;
	}

	if(M%2 != 0 && 2*B+C < N) {
		cout << "NO\n";
		return 0;
	}
	if(N%2 != 0 && 2*A+C < M) {
		cout << "NO\n";
		return 0;
	}

	vector<string> S(N);
	if(N%2 == 0) {
		for(int i =0; i < N/2; i++) {
			if(B > 0) {
				B--;
				S[2*i] +='^';
				S[2*i+1] +='v';
			}
			else {
				S[2*i] +='.';
				S[2*i+1] +='.';
			}
		}
		for(int i =0; i < N/2; i++) for(int j =0; j < M/2; j++) {
			if(A > 1) {
				A -=2;
				S[2*i] +='<';
				S[2*i] +='>';
				S[2*i+1] +='<';
				S[2*i+1] +='>';
			}
			else if(B > 1) {
				B -=2;
				S[2*i] +='^';
				S[2*i] +='^';
				S[2*i+1] +='v';
				S[2*i+1] +='v';
			}
			else if(A > 0) {
				A--;
				S[2*i] +='<';
				S[2*i] +='>';
				S[2*i+1] +='.';
				S[2*i+1] +='.';
			}
			else if(B > 0) {
				B--;
				S[2*i] +='^';
				S[2*i] +='.';
				S[2*i+1] +='v';
				S[2*i+1] +='.';
			}
			else {
				S[2*i] +='.';
				S[2*i] +='.';
				S[2*i+1] +='.';
				S[2*i+1] +='.';
			}
		}
	}
	else {
		if(M%2 != 0) {
			for(int i =0; i < N/2; i++) {
				if(B > 0) {
					B--;
					S[2*i] +='^';
					S[2*i+1] +='v';
				}
				else {
					S[2*i] +='.';
					S[2*i+1] +='.';
				}
			}
			S[N-1] +='.';
		}
		for(int i =0; i < M/2; i++) {
			if(A > 0) {
				A--;
				S[0] +='<';
				S[0] +='>';
			}
			else {
				S[0] +='.';
				S[0] +='.';
			}
		}
		for(int i =0; i < N/2; i++) for(int j =0; j < M/2; j++) {
			if(A > 1) {
				A -=2;
				S[2*i+1] +='<';
				S[2*i+1] +='>';
				S[2*i+2] +='<';
				S[2*i+2] +='>';
			}
			else if(B > 1) {
				B -=2;
				S[2*i+1] +='^';
				S[2*i+1] +='^';
				S[2*i+2] +='v';
				S[2*i+2] +='v';
			}
			else if(A > 0) {
				A--;
				S[2*i+1] +='<';
				S[2*i+1] +='>';
				S[2*i+2] +='.';
				S[2*i+2] +='.';
			}
			else if(B > 0) {
				B--;
				S[2*i+1] +='^';
				S[2*i+1] +='.';
				S[2*i+2] +='v';
				S[2*i+2] +='.';
			}
			else {
				S[2*i+1] +='.';
				S[2*i+1] +='.';
				S[2*i+2] +='.';
				S[2*i+2] +='.';
			}
		}
	}
	if(A > 0 || B > 0) {
		A = A0, B = B0;
		if((N*M)%2 == 0) {
			cout << "NO\n";
			return 0;
		}
		for(int i = 0; i < N; i++) S[i] = "";
		for(int i =0; i < N/2; i++) {
			if(B > 0) {
				B--;
				S[2*i] +='^';
				S[2*i+1] +='v';
			}
			else {
				S[2*i] +='.';
				S[2*i+1] +='.';
			}
		}
		for(int i =0; i < M/2; i++) {
			if(A > 0) {
				A--;
				S[0] +='<';
				S[0] +='>';
			}
			else {
				S[0] +='.';
				S[0] +='.';
			}
		}
		if(A == 0 || B == 0) {
			cout << "NO\n";
			return 0;
		}
		A--, B--;
		S[N-1] +="<>v";
		S[N-2] +=".^";
		for(int i =0; i < N/2; i++) for(int j =0; j < M/2; j++) {
			if(i == N/2-1 && j == 0) continue;
			if(A > 1) {
				A -=2;
				S[2*i+1] +='<';
				S[2*i+1] +='>';
				S[2*i+2] +='<';
				S[2*i+2] +='>';
			}
			else if(B > 1) {
				B -=2;
				S[2*i+1] +='^';
				S[2*i+1] +='^';
				S[2*i+2] +='v';
				S[2*i+2] +='v';
			}
			else if(A > 0) {
				A--;
				S[2*i+1] +='<';
				S[2*i+1] +='>';
				S[2*i+2] +='.';
				S[2*i+2] +='.';
			}
			else if(B > 0) {
				B--;
				S[2*i+1] +='^';
				S[2*i+1] +='.';
				S[2*i+2] +='v';
				S[2*i+2] +='.';
			}
			else {
				S[2*i+1] +='.';
				S[2*i+1] +='.';
				S[2*i+2] +='.';
				S[2*i+2] +='.';
			}
		}
		if(A > 0 || B > 0) {
			cout << "NO\n";
			return 0;
		}
	}
	cout << "YES\n";
	for(int i =0; i < N; i++) cout << S[i] << "\n";
	return 0;}

// look at my code
// my code is amazing


Measured memory_bytes: 2304