#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<deque>
#include<functional>
#include<ctime>
#include<cassert>
#include<cstring>
#include<unordered_map>
using namespace std;

#define sz(x) (int)(x.size())
#define fi(a,b) for(int i=a;i<=b;++i)
#define fj(a,b) for(int j=a;j<=b;++j)
#define fo(a,b) for(int o=a;o<=b;++o)
#define fdi(a,b) for(int i=a;i>=b;--i)
#define fdj(a,b) for(int j=a;j>=b;--j)
#define fdo(a,b) for(int o=a;o>=b;--o)
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef double ld;
typedef vector<int> vi;

template<class T> bool uin(T &a, T b){ return (a > b ? a = b, true : false); }
template<class T> bool uax(T &a, T b){ return (a < b ? a = b, true : false); }

/////////////////////////////////

int const MAXN = 1e3 + 41;

int n, m, a, b;
char s[MAXN][MAXN];

void bad() {
	printf("NO\n");
	exit(0);
}

void placehor(int x, int y) {
	s[x][y] = '<';
	s[x][y + 1] = '>';	
}

void placever(int x, int y) {
	s[x][y] = '^';
	s[x + 1][y] = 'v';
}

void clear() {
 	fi(0, n - 1) {
		fj(0, m - 1) {
			s[i][j] = '.';
		}
	}	
}

bool solve0() {
	clear();
	int b = ::b;
	int a = ::a;
	{
		int x = 0;
		int y = m - 1;
		while(x + 1 < n && b) {
			b--;
			placever(x, y);
			x += 2;
		}
	}
	{
		int x = n - 1;
		int y = 1;
		while(y + 1 < m && a) {
			a--;
			placehor(x, y);
			y += 2;
		}
	}
	if (b && n > 1) {
		placever(n - 2, 0);
		b--;		
	}
	if (n > 2 && m > 2) {
		if (a % 2 == 1) {
			a--;
			placehor(n - 3, 0);		
		} else if (b % 2 == 1) {
			b--;
			placever(n - 3, 1);
		} else if (a) {
			a--;
			placehor(n - 3, 0);					
		} else if (b) {
			b--;
			placever(n - 3, 1);			
		}
	}
	int i = n - 3;
	int j = 2;
	for(; i >= 0; i -= 2) {
		for(; j + 1 < m; j += 2) {
			if (a) {
				if (a > 1) {
					placehor(i, j);
					placehor(i + 1, j);
					a -= 2;
				} else {
					placehor(i, j);
					a -= 1;
				}
			}	else if (b) {
				if (b > 1) {
					placever(i, j);
					placever(i, j + 1);
					b -= 2;
				} else {
					placever(i, j);
					b -= 1;
				}
			}
		}
		j = 0;
	}
	return (a == 0 && b == 0);
}

bool solve1() {
	clear();
	int b = ::b;
	int a = ::a;
	{
		int x = 1;
		int y = m - 1;
		while(x + 1 < n && b) {
			b--;
			placever(x, y);
			x += 2;
		}
	}
	{
		int x = n - 1;
		int y = 0;
		while(y + 1 < m && a) {
			a--;
			placehor(x, y);
			y += 2;
		}
	}
	if (a && m > 1) {
		placehor(0, m - 2);
		a--;		
	}
	if (n > 2 && m > 2) {
		if (a % 2 == 1) {
			a--;
			placehor(1, m - 3);		
		} else if (b % 2 == 1) {
			b--;
			placever(0, m - 3);
		} else if (a) {
			a--;
			placehor(1, m - 3);		
		} else if (b) {
			b--;
			placever(0, m - 3);
		}
	}
	int i = 0;
	int j = m - 5;
	for(; i + 1 < n; i += 2) {
		for(; j >= 0; j -= 2) {
			if (a) {
				if (a > 1) {
					placehor(i, j);
					placehor(i + 1, j);
					a -= 2;
				} else {
					placehor(i, j);
					a -= 1;
				}
			}	else if (b) {
				if (b > 1) {
					placever(i, j);
					placever(i, j + 1);
					b -= 2;
				} else {
					placever(i, j);
					b -= 1;
				}
			}
		}
		j = m - 3;
	}
	return (a == 0 && b == 0);
}


void solve(){
	if (a * 2 + b * 2 > n * m) {
		bad();
	}
	if (n % 2 == 1 && m % 2 == 1) {
		if (solve0()) {
			return;
		}
		if (solve1()) {
			return;
		}
		bad();
	}
	clear();
	if (m & 1) {
		int x = 0;
		int y = m - 1;
		while(x + 1 < n && b) {
			b--;
			placever(x, y);
			x += 2;
		}
	}
	if (n & 1) {
		int x = n - 1;
		int y = 0;
		while(y + 1 < m && a) {
			a--;
			placehor(x, y);
			y += 2;
		}
	}
	if (m & 1) {
		m--;
	}
	if (n & 1) {
		n--;
	}
	for(int i = 0; i < n - 1; i += 2) {
		for(int j = 0; j < m - 1; j += 2) {
			if (a) {
				if (a > 1) {
					placehor(i, j);
					placehor(i + 1, j);
					a -= 2;
				} else {
					placehor(i, j);
					a -= 1;
				}
			} else {
				if (b) {
					if (b > 1) {
						placever(i, j);
						placever(i, j + 1);
						b -= 2;
					} else {
						placever(i, j);
						b -= 1;
					}
				}
			}
		}
	}
	if (a || b) {
		bad();
	}
}

int main(){
#ifdef LOCAL
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
#endif
	
	int n0;
	scanf("%d %d %d %d", &n, &m, &a, &b);	
	n0 = n;
	solve();		
	printf("YES\n");
	fi(0, n0 - 1) {
		printf("%s\n", s[i]);
	}
	
#ifdef LOCAL
	fprintf(stderr, "ELAPSED TIME: %.3lf\n", (ld) clock() / CLOCKS_PER_SEC);
#endif	
	
	return 0;
}

Measured memory_bytes: 2304