#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<random>
#include<map>
#include<set>
#include<complex>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned int ui;
const ll MOD = (1e+9)+7;
const ll INF = (ll)1000000007 * 1000000007;
typedef pair<int, int> P;
#define stop char nyaa;cin>>nyaa;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define per1(i,n) for(int i=n;i>=1;i--)
#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)
typedef long double ld;
typedef complex<ld> Point;
const ld eps = 1e-11;
const ld pi = acos(-1.0);
typedef pair<ll, ll> LP;
typedef pair<ld, ld> LDP;
char t[1000][1000];
int n, m;
void init() {
	rep(i, n) {
		rep(j, m) {
			t[i][j] = '.';
		}
	}
}
int main() {
	cin >> n >> m;
	int a, b; cin >> a >> b;
	if (a == 0 && b == 0) {
		cout << "YES" << endl;
		rep(i, n) {
			rep(j, m) {
				cout << '.';
			}
			cout << endl;
		}
		stop
		return 0;
	}
	if (m > 1) {
		init();
		bool f = true;
		P now = { 0,0 };
		if (n % 2 == 0) {
			rep(i, a) {
				if (now.first >= n) {
					now.second += 2; now.first = 0;
				}
				if (now.second + 1 >= m) {
					f = false; break;
				}
				if (i == a - 1 && (n - now.first) % 2 == 0 && now.second + 3 < m) {
					now.first = 0; now.second += 2;
				}
				t[now.first][now.second] = '<';
				t[now.first][now.second + 1] = '>';
				now.first++;
			}
		}
		else {
			int cntf = 0;
			for (int i = 0; i + 1 < m&&cntf < a; i+=2) {
				cntf++;
				t[0][i] = '<'; t[0][i + 1] = '>';
			}
			now = { 1,0 };
			rep(i, a-cntf) {
				if (now.first >= n) {
					now.second += 2; now.first = 1;
				}
				if (now.second + 1 >= m) {
					f = false; break;
				}
				if (i == a - cntf-1 && (n - now.first) % 2 == 0 && now.second + 3 < m) {
					now.first = 1; now.second += 2;
				}
				if (i == a - cntf - 1 && m % 2 == 1&&(n-now.first)%2==0) {
					now.first = n - 1; now.second = m - 2;
				}
				t[now.first][now.second] = '<';
				t[now.first][now.second + 1] = '>';
				now.first++;
			}
		}
		if (f) {
			int cnt = 0;
			if (b > 0) {
				rep(i, n - 1) {
					rep(j, m) {
						if (t[i][j] == '.'&&t[i + 1][j] == '.') {
							cnt++;
							t[i][j] = '^'; t[i + 1][j] = 'v';
							if (cnt == b)break;
						}
					}
					if (cnt == b)break;
				}
			}
			if (cnt == b) {
				cout << "YES" << endl;
				rep(i, n) {
					rep(j, m) {
						cout << t[i][j];
					}
					cout << endl;
				}
				return 0;
			}
		}
	}
	if (n > 1) {
		init();
		bool f = true;
		P now = { 0,0 };
		if (m % 2==0) {
			rep(i, b) {
				if (now.second >= m) {
					now.first += 2; now.second = 0;
				}
				if (now.first + 1 >= n) {
					f = false; break;
				}
				if (i == b - 1 && (m - now.second) % 2 == 0 && now.first + 3 < n) {
					now.second = 0; now.first += 2;
				}
				t[now.first][now.second] = '^';
				t[now.first + 1][now.second] = 'v';
				now.second++;
			}
		}
		else {
			int cntf = 0;
			for (int i = 0; i + 1 < n&&cntf < b; i += 2) {
				cntf++;
				t[i][0] = '^'; t[i + 1][0] = 'v';
			}
			now = { 0,1 };
			rep(i, b-cntf) {
				if (now.second >= m) {
					now.first += 2; now.second = 1;
				}
				if (now.first + 1 >= n) {
					f = false; break;
				}
				if (i == b - cntf-1 && (m - now.second) % 2 == 0 && now.first + 3 < n) {
					now.second = 1; now.first += 2;
				}
				if (i == b - cntf - 1 && n % 2 == 1&&(m-now.second)%2==0) {
					now.first = n - 2; now.second = m - 1;
				}
				t[now.first][now.second] = '^';
				t[now.first + 1][now.second] = 'v';
				now.second++;
			}
		}
		if (f) {
			int cnt = 0;
			if (a > 0) {
				rep(i, n) {
					rep(j, m - 1) {
						if (t[i][j] == '.'&&t[i][j+1] == '.') {
							cnt++;
							t[i][j] = '<'; t[i][j+1] = '>';
							if (cnt == a)break;
						}
					}
					if (cnt == a)break;
				}
			}
			if (cnt == a) {
				cout << "YES" << endl;
				rep(i, n) {
					rep(j, m) {
						cout << t[i][j];
					}
					cout << endl;
				}
				return 0;
			}
		}
	}
	cout << "NO" << endl;
	return 0;
}

Measured memory_bytes: 2176