#include<bits/stdc++.h>
using namespace std;

#define FOR(i,a,b) for (int i = (a); i < (b); i++)
#define RFOR(i,b,a) for (int i = (b) - 1; i >= (a); i--)
#define ITER(it, a) for(__typeof(a.begin()) it = a.begin(); it != a.end(); it++)
#define FILL(a, value) memset(a, value, sizeof(a))

#define SZ(a) (int)a.size()
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair

typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;

const double PI = acos(-1);
const int INF = 1000 * 1000 * 1000 + 7;
const LL LINF = INF * (LL)INF;

const int MAX = 1000 + 47;
char A[MAX][MAX];

void fill(int n, int m, int& a, int& b)
{
	FOR(i, 0, n)
	{
		FOR(j, 0, m)
		{
			if (a)
			{
				if (i + 1 != n && A[i][j] == '.' && A[i + 1][j] == '.')
				{
					a--;
					A[i][j] = '^';
					A[i + 1][j] = 'v';
				}

				continue;
			}

			if (b)
			{
				if (j + 1 != m && A[i][j] == '.' && A[i][j + 1] == '.')
				{
					b--;
					A[i][j] = '<';
					A[i][j + 1] = '>';
				}
			}
		}
	}
}

void fillHor(int n, int m, int& b)
{
	FOR(j, 0, m)
	{
		if (!b) return;

		if (A[n - 1][j] == '.' && A[n - 1][j + 1] == '.')
		{
			A[n - 1][j] = '<';
			A[n - 1][j + 1] = '>';
			b--;
		}
	}
}

void fillVer(int n, int m, int& a)
{
	FOR(i, 0, n)
	{
		if (!a) return;

		if (A[i][m - 1] == '.' && A[i + 1][m - 1] == '.')
		{
			A[i][m - 1] = '^';
			A[i + 1][m - 1] = 'v';
			a--;
		}
	}
}

int main()
{
	//freopen("in.txt", "r", stdin);
	ios::sync_with_stdio(false); cin.tie(0);
	int n, m, a, b;
	cin >> n >> m >> b >> a;

	FOR(i, 0, n)
	{
		FOR(j, 0, m) A[i][j] = '.';
	}

	if (n % 2 && m % 2)
	{
		if (a)
		{
			A[n - 1][m - 1] = 'v';
			A[n - 2][m - 1] = '^';
			a--;
		}

		if (a)
		{
			A[n - 2][m - 3] = 'v';
			A[n - 3][m - 3] = '^';
			a--;
		}

		if (b)
		{
			A[n - 1][m - 3] = '<';
			A[n - 1][m - 2] = '>';
			b--;
		}

		if (b)
		{
			A[n - 3][m - 2] = '<';
			A[n - 3][m - 1] = '>';
			b--;
		}
	}

	if (m % 2) fillVer(n, m, a);
	if (n % 2) fillHor(n, m, b);
	fill(n, m, a, b);

	if (a || b)
	{
//		FOR(i, 0, n)
//		{
//			FOR(j, 0, m) cout << A[i][j];
//
//			cout << "\n";
//		}
		cout << "NO\n";
		return 0;
	}

	cout << "YES\n";
	FOR(i, 0, n)
	{
		FOR(j, 0, m) cout << A[i][j];

		cout << "\n";
	}
	return 0;
}
