#define _CRT_SECURE_NO_WARNINGS
#pragma comment(linker, "/STACK:108777216")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
#include <functional>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <bitset>
#include <queue>
#include <deque>
#include <utility>
#include <algorithm>
#include <ctime>
using namespace std;

int const MAX_N = 1024;

char ans[MAX_N][MAX_N], nnew[MAX_N][MAX_N];

int main() {
	clock_t t_BG = clock();

//	freopen("input.txt","r",stdin);
//	freopen("output.txt","w",stdout);

	int n,m,a,b;
	cin>>n>>m>>a>>b;
	if (a*2 + b*2 > n*m) {
		cout<<"NO";
		return 0;
	}

	int saved_a = a;
	int saved_b = b;

	for (int i=0; i<n; i++)
		for (int j=0; j<m; j++) {
			ans[i][j] = '.';
			nnew[i][j] = 0;
		}

	for (int i=0; i<n && a; i++)
		for (int j=0; j+1<m && a; j++)
			if (!nnew[i][j] && !nnew[i][j+1]) {
				nnew[i][j] = nnew[i][j+1] = 1;
				a--;
				ans[i][j] = '<';
				ans[i][j+1] = '>';
			}
	for (int i=0; i+1<n && b; i++)
		for (int j=0; j<m && b; j++)
			if (!nnew[i][j] && !nnew[i+1][j]) {
				nnew[i][j] = nnew[i+1][j] = 1;
				b--;
				ans[i][j] = '^';
				ans[i+1][j] = 'v';
			}
	if (a + b) {
		a = saved_a;
		b = saved_b;

		for (int i=0; i<n; i++)
			for (int j=0; j<m; j++) {
				ans[i][j] = '.';
				nnew[i][j] = 0;
			}

		for (int i=0; i+1<n && b; i++)
			for (int j=0; j<m && b; j++)
				if (!nnew[i][j] && !nnew[i+1][j]) {
					nnew[i][j] = nnew[i+1][j] = 1;
					b--;
					ans[i][j] = '^';
					ans[i+1][j] = 'v';
				}
		for (int i=0; i<n && a; i++)
			for (int j=0; j+1<m && a; j++)
				if (!nnew[i][j] && !nnew[i][j+1]) {
					nnew[i][j] = nnew[i][j+1] = 1;
					a--;
					ans[i][j] = '<';
					ans[i][j+1] = '>';
				}
		
		if (a + b) {
			for (int rem_a = 1; ; rem_a++) {
				a = saved_a - rem_a;
				b = saved_b;

				for (int i=0; i<n; i++)
					for (int j=0; j<m; j++) {
						ans[i][j] = '.';
						nnew[i][j] = 0;
					}

				for (int i=0; i<n && a; i++)
					for (int j=0; j+1<m && a; j++)
						if (!nnew[i][j] && !nnew[i][j+1]) {
							nnew[i][j] = nnew[i][j+1] = 1;
							a--;
							ans[i][j] = '<';
							ans[i][j+1] = '>';
						}
				for (int i=0; i+1<n && b; i++)
					for (int j=0; j<m && b; j++)
						if (!nnew[i][j] && !nnew[i+1][j]) {
							nnew[i][j] = nnew[i+1][j] = 1;
							b--;
							ans[i][j] = '^';
							ans[i+1][j] = 'v';
						}

				int a = rem_a;
				for (int i=0; i<n && a; i++)
					for (int j=0; j+1<m && a; j++)
						if (!nnew[i][j] && !nnew[i][j+1]) {
							nnew[i][j] = nnew[i][j+1] = 1;
							a--;
							ans[i][j] = '<';
							ans[i][j+1] = '>';
						}

				if (a + b == 0) {
					cout<<"YES";
					for (int i=0; i<n; i++) {
						printf("\n");
						for (int j=0; j<m; j++) printf("%c",ans[i][j]);
					}
					return 0;
				}

				if ((((double) (clock()- t_BG)) / (CLOCKS_PER_SEC)) > 1.86)
					break;
			}

			for (int cnt_a = 1; cnt_a*2 <= m && cnt_a <= saved_a; cnt_a++) {
				a = saved_a;
				b = saved_b;

				for (int i=0; i<n; i++)
					for (int j=0; j<m; j++) {
						ans[i][j] = '.';
						nnew[i][j] = 0;
					}

				for (int i=0; i<n && a; i++)
					for (int j=0; j+1<m && a && j/2 < cnt_a; j++)
						if (!nnew[i][j] && !nnew[i][j+1]) {
							nnew[i][j] = nnew[i][j+1] = 1;
							a--;
							ans[i][j] = '<';
							ans[i][j+1] = '>';
						}

				for (int i=0; i+1<n && b; i++)
					for (int j=0; j<m && b; j++)
						if (!nnew[i][j] && !nnew[i+1][j]) {
							nnew[i][j] = nnew[i+1][j] = 1;
							b--;
							ans[i][j] = '^';
							ans[i+1][j] = 'v';
						}
				if (a + b == 0) {
					cout<<"YES";
					for (int i=0; i<n; i++) {
						printf("\n");
						for (int j=0; j<m; j++) printf("%c",ans[i][j]);
					}
					return 0;
				}

				if ((((double) (clock()- t_BG)) / (CLOCKS_PER_SEC)) > 1.86)
					break;
			}

			for (int cnt_b = 1; cnt_b*2 <= n && cnt_b <= saved_b; cnt_b++) {
				a = saved_a;
				b = saved_b;

				for (int i=0; i<n; i++)
					for (int j=0; j<m; j++) {
						ans[i][j] = '.';
						nnew[i][j] = 0;
					}

				for (int i=0; i+1<n && b && i/2 < cnt_b; i++)
					for (int j=0; j<m && b; j++)
						if (!nnew[i][j] && !nnew[i+1][j]) {
							nnew[i][j] = nnew[i+1][j] = 1;
							b--;
							ans[i][j] = '^';
							ans[i+1][j] = 'v';
						}

				for (int i=0; i<n && a; i++)
					for (int j=0; j+1<m && a; j++)
						if (!nnew[i][j] && !nnew[i][j+1]) {
							nnew[i][j] = nnew[i][j+1] = 1;
							a--;
							ans[i][j] = '<';
							ans[i][j+1] = '>';
						}
				
				if (a + b == 0) {
					cout<<"YES";
					for (int i=0; i<n; i++) {
						printf("\n");
						for (int j=0; j<m; j++) printf("%c",ans[i][j]);
					}
					return 0;
				}

				if ((((double) (clock()- t_BG)) / (CLOCKS_PER_SEC)) > 1.86)
					break;
			}

			cout<<"NO";
			return 0;
		}

		cout<<"YES";
		for (int i=0; i<n; i++) {
			printf("\n");
			for (int j=0; j<m; j++) printf("%c",ans[i][j]);
		}
		return 0;
	}
	cout<<"YES";
	for (int i=0; i<n; i++) {
		printf("\n");
		for (int j=0; j<m; j++) printf("%c",ans[i][j]);
	}
    return 0;
}

Measured memory_bytes: 3200