#include <bits/stdc++.h>
#define be(v) (v).begin(),(v).end()
#define pb(q) push_back(q)
typedef long long ll;
using namespace std;
const ll mod=1000000007, INF=(1LL<<60);
#define doublecout(a) cout<<fixed<<setprecision(10)<<a<<endl;

vector<string> solve(int n, int m , int a, int b){
	vector<string> s(n, string (m, '.'));
	for(int i=0;i<n/2;i++){
		for(int j=0;j<m/2;j++){
			if(a){
				s[i*2][j*2] = '<';
				s[i*2][j*2+1] = '>';
				if(a >= 2){
					s[i*2+1][j*2] = '<';
				    s[i*2+1][j*2+1] = '>';
				    a--;
				}
				a--;
			}else{
				if(b){
					s[i*2][j*2] = '^';
					s[i*2+1][j*2] = 'v';
					if(b >= 2){
						s[i*2][j*2+1] = '^';
						s[i*2+1][j*2+1] = 'v';
						b--;
					}
					b--;
				}
			}
		}
	}
	return s;
}
int main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    int n, m, a, b;
    cin >> n >> m >> a >> b;
    vector<string> s(n, string (m, '.'));
    if(n & 1){
    	if(m & 1){
    		int d = a, e = b;
    		int c = min(a, m / 2);
    		for(int i=0;i<c;i++){
    			s[n-1][i*2] = '<';
    			s[n-1][i*2+1] = '>';
    		}
    		a -= c;
    		c = min(b, n / 2);
    		for(int i=0;i<c;i++){
    			s[i*2][m-1] = '^';
    			s[i*2+1][m-1] = 'v';
    		}
    		b -= c;
    		int r = (n / 2) * (m / 2);
    		r -= (b + 1) / 2;
    		r -= (a + 1) / 2;
    		if(r < 0){
    			a = d, b = e;
    			if(a < 2 || b < 2 || n == 1 || m == 1){
    				cout << "NO" << endl;
    				return 0;
    			}
    			s = vector<string> (n, string(m, '.'));
    			s[0][0] = '<';
    			s[0][1] = '>';
    			s[0][2] = '^';
    			s[1][2] = 'v';
    			s[2][1] = '<';
    			s[2][2] = '>';
    			a -= 2; 
    			b--;
    			c = min(b, n/2);
    			for(int i=0;i<c;i++){
    				s[i*2+1][0] = '^';
    				s[i*2+2][0] = 'v';
    			}
    			b -= c;
    			c = min(a, (m-3)/2);
    			for(int i=0;i<c;i++){
    				s[0][i*2+3] = '<';
    				s[0][i*2+4] = '>';
    			}
    			a -= c;
    			for(int i=1;i<n;i+=2){
    				for(int j=1;j<m;j+=2){
    					if(i == 1 && j == 1) continue;
    					if(a){
    						s[i][j] = '<';
    						s[i][j+1] = '>';
    						if(a >= 2){
    							s[i+1][j] = '<';
    							s[i+1][j+1] = '>';
    							a--;
    						}
    						a--;
    					}else if(b){
    						s[i][j] = '^';
    						s[i+1][j] = 'v';
    						if(b >= 2){
    							s[i][j+1] = '^';
    							s[i+1][j+1] = 'v';
    							b--;
    						}
    						b--;
    					}
    				}
    			}
    			if(a || b){
    				cout << "NO" << endl;
    				return 0;
    			}
    			cout << "YES" << endl;
    			for(int i=0;i<n;i++){
    				cout << s[i] << endl;
    			}
    			return 0;
    		}
    		cout << "YES" << endl;
    		vector<string> ret = solve(n-1, m-1, a, b);
    		for(int i=0;i<n;i++){
    			for(int j=0;j<m;j++){
    				if(i < n-1 && j < m-1){
    					s[i][j] = ret[i][j];
    				}
    			}
    			cout << s[i] << endl;
    		}
    	}else{
    		int c = a - m / 2;
    		if(c <= 0){
    			int r = (n / 2) * (m / 2);
    			r -= (b + 1) / 2;
    			if(r < 0){
    				cout << "NO" << endl;
    				return 0;
    			}else{
    				cout << "YES" << endl;
    			}
    			for(int i=0;i<a;i++){
    				s[n-1][i*2] = '<';
    				s[n-1][i*2+1] = '>';
    			}
    			c = 0;
    		}else{
    			int r = (n / 2) * (m / 2);
    			r -= (b + 1) / 2;
    			r -= (c + 1) / 2;
    			if(r < 0){
    				cout << "NO" << endl;
    				return 0;
    			}else{
    				cout << "YES" << endl;
    			}
    			for(int i=0;i<m;i++){
    				if(i&1) s[n-1][i] = '>';
    				else s[n-1][i] = '<';
    			}
    		}
    		vector<string> ret = solve(n-1, m, c, b);
    		for(int i=0;i<n;i++){
    			for(int j=0;j<m;j++){
    				if(i < n - 1){
    					s[i][j] = ret[i][j];
    				}
    			}
    			cout << s[i] << endl;
    		}
    	}
    }else{
    	if(m & 1){
    		int c = b - n / 2;
    		if(c <= 0){
    			int r = (n / 2) * (m / 2);
    			r -= (a + 1) / 2;
    			if(r < 0){
    				cout << "NO" << endl;
    				return 0;
    			}else{
    				cout << "YES" << endl;
    			}
    			for(int i=0;i<b;i++){
    				s[i*2][m-1] = '^';
    				s[i*2+1][m-1] = 'v';
    			}
    			c = 0;
    		}else{
    			int r = (n / 2) * (m / 2);
    			r -= (a + 1) / 2;
    			r -= (c + 1) / 2;
    			if(r < 0){
    				cout << "NO" << endl;
    				return 0;
    			}else{
    				cout << "YES" << endl;
    			}
    			for(int i=0;i<n;i++){
    				if(i&1) s[i][m-1] = 'v';
    				else s[i][m-1] = '^';
    			}
    		}
    		vector<string> ret = solve(n, m-1, a, c);
    		for(int i=0;i<n;i++){
    			for(int j=0;j<m;j++){
    				if(j < m - 1){
    					s[i][j] = ret[i][j];
    				}
    			}
    			cout << s[i] << endl;
    		}
    	}else{
    		int r = n * m / 4;
    		r -= (a + 1) / 2;
    		r -= (b + 1) / 2;
    		if(r < 0){
    			cout << "NO" << endl;
    			return 0;
    		}else{
    			cout << "YES" << endl;
    		}
    		vector<string> ret = solve(n, m, a, b);
    		for(int i=0;i<n;i++){
    			cout << ret[i] << endl;
    		}
    	}
    }
    return 0;
}


Measured memory_bytes: 5328