#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <string>
#include <sstream>
#include <complex>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
using namespace std;
 
#define mod 1000000007
#define FOR(x,to) for(int x=0;x<(to);x++)
#define FORR(x,arr) for(auto& x:arr)
#define ALL(a) (a.begin()),(a.end())
#define ZERO(a) memset(a,0,sizeof(a))
#define MINUS(a) memset(a,0xff,sizeof(a))
#define long long long
inline int rei(){int x;cin>>x;return x;}
inline long rel(){long x;cin>>x;return x;}
inline string res(){string x;cin>>x;return x;}
//------------------------------------------------------- 
int Map[1000000];
void Calc(){
	int H = rei();
	int W = rei();
	int A = rei();
	int B = rei();
	if(H % 2 == 0 && W % 2 == 0){
		if(A % 2 == 0 && B % 2 == 0){
			if(H*W < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 1 && B % 2 == 0){
			if(H*W-2 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 0 && B % 2 == 1){
			if(H*W-2 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 1 && B % 2 == 1){
			if(H*W-4 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		for(int i=0;i<H/2;i++){
			for(int j=0;j<W/2;j++){
				if(A){
					Map[i*2*W+j*2] = 1;
					Map[i*2*W+j*2+1] = 2;
					A--;
					if(A){
						Map[i*2*W+W+j*2] = 1;
						Map[i*2*W+W+j*2+1] = 2;
						A--;
					}
				}
				else if(B){
					Map[i*2*W+j*2] = 3;
					Map[i*2*W+W+j*2] = 4;
					B--;
					if(B){
						Map[i*2*W+j*2+1] = 3;
						Map[i*2*W+W+j*2+1] = 4;
						B--;
					}
				}
			}
		}
	}
	else if(H % 2 == 1 && W % 2 == 0){
		for(int i=0;i<W/2;i++){
			if(A){
				Map[(H-1)*W+i*2] = 1;
				Map[(H-1)*W+i*2+1] = 2;
				A--;
			}
		}
		if(A % 2 == 0 && B % 2 == 0){
			if((H-1)*W < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 1 && B % 2 == 0){
			if((H-1)*W-2 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 0 && B % 2 == 1){
			if((H-1)*W-2 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 1 && B % 2 == 1){
			if((H-1)*W-4 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		for(int i=0;i<H/2;i++){
			for(int j=0;j<W/2;j++){
				if(A){
					Map[i*2*W+j*2] = 1;
					Map[i*2*W+j*2+1] = 2;
					A--;
					if(A){
						Map[i*2*W+W+j*2] = 1;
						Map[i*2*W+W+j*2+1] = 2;
						A--;
					}
				}
				else if(B){
					Map[i*2*W+j*2] = 3;
					Map[i*2*W+W+j*2] = 4;
					B--;
					if(B){
						Map[i*2*W+j*2+1] = 3;
						Map[i*2*W+W+j*2+1] = 4;
						B--;
					}
				}
			}
		}
	}
	else if(H % 2 == 0 && W % 2 == 1){
		for(int i=0;i<H/2;i++){
			if(B){
				Map[i*2*W+W-1] = 3;
				Map[i*2*W+W+W-1] = 4;
				B--;
			}
		}
		if(A % 2 == 0 && B % 2 == 0){
			if(H*(W-1) < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 1 && B % 2 == 0){
			if(H*(W-1)-2 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 0 && B % 2 == 1){
			if(H*(W-1)-2 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		if(A % 2 == 1 && B % 2 == 1){
			if(H*(W-1)-4 < A*2+B*2){
				cout << "NO" << endl;
				return;
			}
		}
		for(int i=0;i<H/2;i++){
			for(int j=0;j<W/2;j++){
				if(A){
					Map[i*2*W+j*2] = 1;
					Map[i*2*W+j*2+1] = 2;
					A--;
					if(A){
						Map[i*2*W+W+j*2] = 1;
						Map[i*2*W+W+j*2+1] = 2;
						A--;
					}
				}
				else if(B){
					Map[i*2*W+j*2] = 3;
					Map[i*2*W+W+j*2] = 4;
					B--;
					if(B){
						Map[i*2*W+j*2+1] = 3;
						Map[i*2*W+W+j*2+1] = 4;
						B--;
					}
				}
			}
		}
	}
	else{
		if(A > W/2*H){
			cout << "NO" << endl;
			return;
		}
		if(B > H/2*W){
			cout << "NO" << endl;
			return;
		}
		if(2*A+2*B > H*W){
			cout << "NO" << endl;
			return;
		}
		for(int i=0;i<W/2-1;i++){
			if(A){
				Map[(H-1)*W+i*2] = 1;
				Map[(H-1)*W+i*2+1] = 2;
				A--;
			}
		}
		for(int i=0;i<H/2-1;i++){
			if(B){
				Map[i*2*W+W-1] = 3;
				Map[i*2*W+W+W-1] = 4;
				B--;
			}
		}
		if(A % 2 == 0 && B % 2 == 0){
			if(A){
				Map[H*W-1] = 2;
				Map[H*W-2] = 1;
				Map[H*W-2*W-2] = 2;
				Map[H*W-2*W-3] = 1;
				A -= 2;
			}
			if(B){
				Map[H*W-3-W] = 3;
				Map[H*W-3] = 4;
				Map[H*W-1-2*W] = 3;
				Map[H*W-1-W] = 4;
				B -= 2;
			}
		}
		else{
			if(A){
				Map[H*W-2] = 2;
				Map[H*W-3] = 1;
				A--;
			}
			if(B){
				Map[H*W-1-W] = 4;
				Map[H*W-1-2*W] = 3;
				B--;
			}
		}
		for(int i=0;i<H/2;i++){
			for(int j=0;j<W/2;j++){
				if(A){
					Map[i*2*W+j*2] = 1;
					Map[i*2*W+j*2+1] = 2;
					A--;
					if(A){
						Map[i*2*W+W+j*2] = 1;
						Map[i*2*W+W+j*2+1] = 2;
						A--;
					}
				}
				else if(B){
					Map[i*2*W+j*2] = 3;
					Map[i*2*W+W+j*2] = 4;
					B--;
					if(B){
						Map[i*2*W+j*2+1] = 3;
						Map[i*2*W+W+j*2+1] = 4;
						B--;
					}
				}
			}
		}
	}
	cout << "YES" << endl;
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			if(Map[i*W+j] == 0){
				cout << '.';
			}
			if(Map[i*W+j] == 1){
				cout << '<';
			}
			if(Map[i*W+j] == 2){
				cout << '>';
			}
			if(Map[i*W+j] == 3){
				cout << '^';
			}
			if(Map[i*W+j] == 4){
				cout << 'v';
			}
		}
		cout << endl;
	}
}
int main(int argc,char** argv){
	ios::sync_with_stdio(false), cin.tie(0);
	cout.tie(0); Calc(); return 0;
}

Measured memory_bytes: 5120