#include <bits/stdc++.h>

using namespace std;

char trans(char c) {
	if(c == '.') {
		return c;
	}
	if(c == '^') {
		c = '<';
	}
	else if(c == 'v') {
		c = '>';
	}
	else if(c == '<') {
		c = '^';
	}
	else {
		c = 'v';
	}
	return c;
}

void solve(int n, int m, int x, int y, int a, int b, vector<string> &ans) {
	if(x * m < b) {
		ans.clear();
		return;
	}
	if(a <= y) {
		for (int i = 0; i < a; ++i) {
			ans[n - 1][i * 2] = '<';
			ans[n - 1][i * 2 + 1] = '>';
		}
		int cur_x = 0, cur_y = 0;
		for (int i = 0; i < b; ++i) {
			ans[cur_x][cur_y] = '^';
			ans[cur_x + 1][cur_y] = 'v';
			++cur_y;
			if(cur_y == m) {
				cur_y = 0;
				cur_x += 2;
			}
		}
		return;
	}
	for (int i = 0; i < y; ++i) {
		ans[n - 1][i * 2] = '<';
		ans[n - 1][i * 2 + 1] = '>';
		--a;
	}
	if((n - 1) * m / 2 == a + b && a % 2 == 1) {
		ans.clear();
		return;
	}
	int cur_x = 0, cur_y = 0;
	for (int i = 0; i < a; i += 2) {
		ans[cur_x][cur_y] = '<';
		ans[cur_x][cur_y + 1] = '>';
		if(i + 1 < a) {
			ans[cur_x + 1][cur_y] = '<';
			ans[cur_x + 1][cur_y + 1] = '>';
		}
		cur_y += 2;
		if(cur_y == m) {
			cur_y = 0;
			cur_x += 2;
		}
	}
	for (int i = 0; i < b; i += 2) {
		ans[cur_x][cur_y] = '^';
		ans[cur_x + 1][cur_y] = 'v';
		if(i + 1 < b) {
			ans[cur_x][cur_y + 1] = '^';
			ans[cur_x + 1][cur_y + 1] = 'v';
		}
		cur_y += 2;
		if(cur_y == m) {
			cur_y = 0;
			cur_x += 2;
		}
	}
	return;
}

int main() {
	ios::sync_with_stdio(false);
	int n, m, a, b, x, y;
	cin >> n >> m >> a >> b;
	x = n / 2;
	y = m / 2;
	vector<string> ans(n, string(m, '.'));
	if(n * m / 2 < a + b) {
		cout << "NO" << endl;
		return 0;
	}
	if(n % 2 == 0 && m % 2 == 0) {
		if(n * m / 2 == a + b && a % 2 == 1) {
			cout << "NO" << endl;
			return 0;
		}
		int cur_x = 0, cur_y = 0;
		for (int i = 0; i < a; i += 2) {
			ans[cur_x][cur_y] = '<';
			ans[cur_x][cur_y + 1] = '>';
			if(i + 1 < a) {
				ans[cur_x + 1][cur_y] = '<';
				ans[cur_x + 1][cur_y + 1] = '>';
			}
			cur_y += 2;
			if(cur_y == m) {
				cur_y = 0;
				cur_x += 2;
			}
		}
		for (int i = 0; i < b; i += 2) {
			ans[cur_x][cur_y] = '^';
			ans[cur_x + 1][cur_y] = 'v';
			if(i + 1 < b) {
				ans[cur_x][cur_y + 1] = '^';
				ans[cur_x + 1][cur_y + 1] = 'v';
			}
			cur_y += 2;
			if(cur_y == m) {
				cur_y = 0;
				cur_x += 2;
			}
		}
		cout << "YES" << endl;
		for (int i = 0; i < n; ++i) {
			cout << ans[i] << endl;
		}
		return 0;
	}
	if(n % 2 == 1 && m % 2 == 1) {
		if(y * n < a || x * m < b) {
			cout << "NO" << endl;
			return 0;
		}
		if(a <= y) {
			for (int i = 0; i < a; ++i) {
				ans[n - 1][i * 2] = '<';
				ans[n - 1][i * 2 + 1] = '>';
			}
			int cur_x = 0, cur_y = 0;
			for (int i = 0; i < b; ++i) {
				ans[cur_x][cur_y] = '^';
				ans[cur_x + 1][cur_y] = 'v';
				++cur_y;
				if(cur_y == m) {
					cur_y = 0;
					cur_x += 2;
				}
			}
			cout << "YES" << endl;
			for (int i = 0; i < n; ++i) {
				cout << ans[i] << endl;
			}
			return 0;
		}
		if(b <= x) {
			for (int i = 0; i < b; ++i) {
				ans[i * 2][m - 1] = '^';
				ans[i * 2 + 1][m - 1] = 'v';
			}
			int cur_x = 0, cur_y = 0;
			for (int i = 0; i < a; ++i) {
				ans[cur_x][cur_y] = '<';
				ans[cur_x][cur_y + 1] = '>';
				++cur_x;
				if(cur_x == n) {
					cur_x = 0;
					cur_y += 2;
				}
			}
			cout << "YES" << endl;
			for (int i = 0; i < n; ++i) {
				cout << ans[i] << endl;
			}
			return 0;
		}
		for (int i = 0; i < y; ++i) {
			ans[n - 1][i * 2] = '<';
			ans[n - 1][i * 2 + 1] = '>';
			--a;
		}
		for (int i = 0; i < x; ++i) {
			ans[i * 2][m - 1] = '^';
			ans[i * 2 + 1][m - 1] = 'v';
			--b;
		}
		if((n - 1) * (m - 1) / 2 == a + b && a % 2 == 1) {
			if(n >= 3 && m >= 3) {
				ans[n - 2][m - 1] = '^';
				ans[n - 1][m - 1] = 'v';
				ans[n - 3][m - 2] = '<';
				ans[n - 3][m - 1] = '>';
				ans[n - 3][m - 3] = '^';
				ans[n - 2][m - 3] = 'v';
			}
			else {
				cout << "NO" << endl;
				return 0;
			}
			--a;
			--b;
		}
		int cur_x = 0, cur_y = 0;
		for (int i = 0; i < a; i += 2) {
			ans[cur_x][cur_y] = '<';
			ans[cur_x][cur_y + 1] = '>';
			if(i + 1 < a) {
				ans[cur_x + 1][cur_y] = '<';
				ans[cur_x + 1][cur_y + 1] = '>';
			}
			cur_y += 2;
			if(cur_y == m - 1) {
				cur_y = 0;
				cur_x += 2;
			}
		}
		for (int i = 0; i < b; i += 2) {
			ans[cur_x][cur_y] = '^';
			ans[cur_x + 1][cur_y] = 'v';
			if(i + 1 < b) {
				ans[cur_x][cur_y + 1] = '^';
				ans[cur_x + 1][cur_y + 1] = 'v';
			}
			cur_y += 2;
			if(cur_y == m - 1) {
				cur_y = 0;
				cur_x += 2;
			}
		}
		cout << "YES" << endl;
		for (int i = 0; i < n; ++i) {
			cout << ans[i] << endl;
		}
		return 0;
	}
	if(n % 2 == 1) {
		solve(n, m, x, y, a, b, ans);
	}
	else {
		vector<string> tans(m, string(n, '.'));
		solve(m, n, y, x, b, a, tans);
		if(!tans.size()) {
			ans.clear();
		}
		else {
			for (int i = 0; i < n; ++i) {
				for (int j = 0; j < m; ++j) {
					ans[i][j] = trans(tans[j][i]);
				}
			}
		}
	}
	if(!ans.size()) {
		cout << "NO" << endl;
		return 0;
	}
	cout << "YES" << endl;
	for (int i = 0; i < n; ++i) {
		cout << ans[i] << endl;
	}
	return 0;
}


Measured memory_bytes: 2944