#include <bits/stdc++.h>

using namespace std;

#ifdef DEBUG_MODE
	#define DBG(n) n;
#else
	#define DBG(n) ;
#endif
#define REP(i,n) for(ll (i) = (0);(i) < (n);++i)
#define rep(i,s,g) for(ll (i) = (s);(i) < (g);++i)
#define rrep(i,s,g) for(ll (i) = (s);i >= (g);--(i))
#define PB push_back
#define MP make_pair
#define FI first
#define SE second
#define SHOW1d(v,n) {for(int WWW = 0;WWW < (n);WWW++)cerr << v[WWW] << ' ';cerr << endl << endl;}
#define SHOW2d(v,i,j) {for(int aaa = 0;aaa < i;aaa++){for(int bbb = 0;bbb < j;bbb++)cerr << v[aaa][bbb] << ' ';cerr << endl;}cerr << endl;}
#define ALL(v) v.begin(),v.end()
#define Decimal fixed<<setprecision(20)
#define INF 1000000000
#define LLINF 1000000000000000000LL
#define MOD 1000000007

typedef long long ll;
typedef pair<ll,ll> P;

char mp[1111][1111];

int main(){
		REP(i,1111)REP(j,1111)mp[i][j] = '.';
	int n,m,a,b;cin >> n >> m >> a >> b;
	int A = a;
	int B = b;
	
	if(n > 2 && m > 2 && a > 1 && b > 1 && (n*m) % 2 == 1){
		mp[n-1][m-1] = '>';
		mp[n-1][m-2] = '<';
		mp[n-1][m-3] = 'v';
		mp[n-2][m-3] = '^';
		mp[n-3][m-3] = '<';
		mp[n-3][m-2] = '>';
		mp[n-3][m-1] = '^';
		mp[n-2][m-1] = 'v';
		a -= 2;b -= 2;
	}
	DBG(cout << "!" << endl;)
	if(n % 2 == 1){
		for(int i = 0;i < m;i += 2){
			if(a > 0 && i + 1 < m && mp[n-1][i] == '.'){
				mp[n-1][i] = '<';
				mp[n-1][i+1] = '>';
				a--;
			}
		}
	}
	DBG(cout << "!" << endl;)
	if(m % 2 == 1){
		for(int i = 0;i < n;i += 2){
			if(b > 0 && i + 1 < n && mp[i][m-1] == '.'){
				mp[i][m-1] = '^';
				mp[i+1][m-1] = 'v';
				b--;
			}
		}
	}
	DBG(cout << "!" << endl;)	
	for(int i = 0;i < n;i += 2){
		for(int j = 0;j < m;j += 2){
			DBG(cout << i << ' ' << j << endl;)
			if(i+1 >= n || j+1 >= m)break;
			
			if(a > 0){
				if(a > 0 && mp[i][j] == '.'){
					mp[i][j] = '<';
					mp[i][j+1] = '>';
					a--;
				}
				if(a > 0 && mp[i+1][j] == '.'){
					mp[i+1][j] = '<';
					mp[i+1][j+1] = '>';
					a--;
				}
			}
			else if(b > 0){
				if(b > 0 && mp[i][j] == '.'){
					mp[i][j] = '^';
					mp[i+1][j] = 'v';
					b--;
				}
				if(b > 0 && mp[i][j+1] == '.'){
					mp[i][j+1] = '^';
					mp[i+1][j+1] = 'v';
					b--;
				}	
			}
			else break;
		}
	}
	DBG(cout << "!" << endl;)
	if(a == 0 && b == 0){
		cout << "YES" << endl;
		REP(i,n){
			REP(j,m){
				cout << mp[i][j];
			}
			cout << endl;
		}
		return 0;
	}
	
	REP(i,1111)REP(j,1111)mp[i][j] = '.';
	a = A;b = B;
	DBG(cout << "!" << endl;)
	if(n % 2 == 1){
		for(int i = 0;i < m;i += 2){
			if(a > 0 && i + 1 < m && mp[n-1][i] == '.'){
				mp[n-1][i] = '<';
				mp[n-1][i+1] = '>';
				a--;
			}
		}
	}
	DBG(cout << "!" << endl;)
	if(m % 2 == 1){
		for(int i = 0;i < n;i += 2){
			if(b > 0 && i + 1 < n && mp[i][m-1] == '.'){
				mp[i][m-1] = '^';
				mp[i+1][m-1] = 'v';
				b--;
			}
		}
	}
	DBG(cout << "!" << endl;)	
	for(int i = 0;i < n;i += 2){
		for(int j = 0;j < m;j += 2){
			DBG(cout << i << ' ' << j << endl;)
			if(i+1 >= n || j+1 >= m)break;
			
			if(a > 0){
				if(a > 0 && mp[i][j] == '.'){
					mp[i][j] = '<';
					mp[i][j+1] = '>';
					a--;
				}
				if(a > 0 && mp[i+1][j] == '.'){
					mp[i+1][j] = '<';
					mp[i+1][j+1] = '>';
					a--;
				}
			}
			else if(b > 0){
				if(b > 0 && mp[i][j] == '.'){
					mp[i][j] = '^';
					mp[i+1][j] = 'v';
					b--;
				}
				if(b > 0 && mp[i][j+1] == '.'){
					mp[i][j+1] = '^';
					mp[i+1][j+1] = 'v';
					b--;
				}	
			}
			else break;
		}
	}
	DBG(cout << "!" << endl;)
	if(a == 0 && b == 0){
		cout << "YES" << endl;
		REP(i,n){
			REP(j,m){
				cout << mp[i][j];
			}
			cout << endl;
		}
	}
	else{
		cout << "NO" << endl;
	}
	
	return 0;
}


Measured memory_bytes: 2432