//wls niubi!
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod = 1e9 + 7;
inline int read()
{
	int x = 0,f = 1;char ch = getchar();
	for(;!isdigit(ch);ch = getchar())if(ch == '-')f = -f;
	for(;isdigit(ch);ch = getchar())x = 10 * x + ch - '0';
	return x * f;
}
int N,M,A,B;
namespace force1
{
	int n,m,a,b;
	int NO,YES;
	char grid[1010][1010];
	void putgrid(int dx,int dy,int type) //2 * 2 lefttop (dx,dy)
	{
	    if(type == 0) // heng zhe bai
	    {
	        grid[dx][dy] = '<',grid[dx + 1][dy] = '<';
	        grid[dx][dy + 1] = '>',grid[dx + 1][dy + 1] = '>';
		}
		else
		{
		    grid[dx][dy] = '^',grid[dx + 1][dy] = 'v';
	        grid[dx][dy + 1] = '^',grid[dx + 1][dy + 1] = 'v';
		}
	}
	void puthalf(int dx,int dy,int type)
	{
	    if(type == 0) // heng zhe bai
	    {
	        grid[dx][dy] = '<',grid[dx][dy + 1] = '>';
		}
		else
		{
		    grid[dx][dy] = '^',grid[dx + 1][dy] = 'v';
		}
	}
	void fillgrid(int n,int m) //assert that n and m are even
	{
		int tl = n / 2,tr = m / 2;
		int rr = tl * tr * 2;
		if(rr < a + b){NO = 1;return;}
		else
		{
			for(int i=1;i+1<=n;i+=2)
				for(int j=1;j+1<=m;j+=2)
				{
					if(a > 1){putgrid(i,j,0);a -= 2;continue;}
					else if(b > 1){putgrid(i,j,1);b -= 2;continue;}
					if(a == 1)
					{
						puthalf(i,j,0);
						a--;
					}
					else if(b == 1)
					{
					    puthalf(i,j,1);
					    b--;
					}
				}
			if(a || b){NO = 1;return;}
		}
	}
	void filldown()
	{
		for(int i=1;i+1<=m;i+=2)
		    if(a){puthalf(n,i,0);a--;} 
	}
	void fillright()
	{
	    for(int i=1;i+1<=n;i+=2)
	    	if(b){puthalf(i,m,1);b--;}
	}
	int _main()
	{
		n = N,m = M,a = A,b = B;
		for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)grid[i][j] = '.';
		if(n & 1)
		{
			if(m & 1)
			{
				fillright();filldown();
			    fillgrid(n - 1,m - 1);
			}
			else
			{
				filldown();
			    fillgrid(n - 1,m);
			}
		}
		else 
		{
		    if(m & 1)
		    {
		    	fillright();
		    	fillgrid(n,m - 1);
			}
			else fillgrid(n,m);
		}
		if(NO)return 0;
		puts("YES");
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)putchar(grid[i][j]);
			puts("");
		}
		exit(0);
	}
}
namespace force2
{
	    
	int n,m,a,b;
	int aaamega;
	const char megaplus[3][3] = 
	{
		{'<','>','^'},
		{'^','.','v'},
		{'v','<','>'}
	};
	const char megaplusa[3][3] = 
	{
		{'.','^','^'},
		{'^','v','v'},
		{'v','<','>'}
	};
	const char megaplusb[3][3] = 
	{
		{'<','>','^'},
		{'<','>','v'},
		{'.','<','>'}
	};
	char grid[1010][1010];
	void putgrid(int dx,int dy,int type) //2 * 2 lefttop (dx,dy)
	{
	    if(type == 0) // heng zhe bai
	    {
	        grid[dx][dy] = '<',grid[dx + 1][dy] = '<';
	        grid[dx][dy + 1] = '>',grid[dx + 1][dy + 1] = '>';
		}
		else
		{
		    grid[dx][dy] = '^',grid[dx + 1][dy] = 'v';
	        grid[dx][dy + 1] = '^',grid[dx + 1][dy + 1] = 'v';
		}
	}
	void puthalf(int dx,int dy,int type)
	{
	    if(type == 0) // heng zhe bai
	    {
	        grid[dx][dy] = '<',grid[dx][dy + 1] = '>';
		}
		else
		{
		    grid[dx][dy] = '^',grid[dx + 1][dy] = 'v';
		}
	}
	void fillgrid(int n,int m) //assert that n and m are even
	{
		int tl = n / 2,tr = m / 2;
		int rr = tl * tr * 2;
		if(rr < a + b){puts("NO");exit(0);}
		else
		{
			for(int i=1;i+1<=n;i+=2)
				for(int j=1;j+1<=m;j+=2)
				{
					if(a > 1){putgrid(i,j,0);a -= 2;continue;}
					else if(b > 1){putgrid(i,j,1);b -= 2;continue;}
					if(a == 1)
					{
						puthalf(i,j,0);
						a--;
						continue;
					}
					else if(b == 1)
					{
					    puthalf(i,j,1);
					    b--;
					    continue;
					}
				}
			if(aaamega)
			{
				n++,m++;
				for(int i=0;i<3;i++)
					for(int j=0;j<3;j++)
					{
						if(grid[n - 2 + i][m - 2 + j] == '<')a++;if(grid[n - 2 + i][m - 2 + j] == '^')b++; 
					}
			    	if(a == 2 && b == 2)
			    	{
			    		puts("YES");
				    	for(int i=0;i<3;i++)
				    	    for(int j=0;j<3;j++)
				    	    	grid[n - 2 + i][m - 2 + j] = megaplus[i][j];
				    	for(int i=1;i<=n;i++)
						{
							for(int j=1;j<=m;j++)putchar(grid[i][j]);
							puts("");
						}
						exit(0);
					}
				}
			else
			{
				if(a || b){puts("NO");exit(0);}
				puts("YES");
			}
		}
	}
	void filldown()
	{
		for(int i=1;i+1<=m;i+=2)
		    if(a){puthalf(n,i,0);a--;}
	}
	void fillright()
	{
	    for(int i=1;i+1<=n;i+=2)
	    	if(b){puthalf(i,m,1);b--;}
	}
	int _main()
	{
		n = N,m = M,a = A,b = B;
		for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)grid[i][j] = '.';
		if(n & 1)
		{
			if(m & 1)
			{
				aaamega = 1;
				filldown();fillright();
			    fillgrid(n - 1,m - 1);
			}
			else
			{
				filldown();
			    fillgrid(n - 1,m);
			}
		}
		else 
		{
		    if(m & 1)
		    {
		    	fillright();
		    	fillgrid(n,m - 1);
			}
			else fillgrid(n,m);
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)putchar(grid[i][j]);
			puts("");
		}
	}
}
int main()
{
    N = read(),M = read(),A = read(),B = read();
    int fmain = force1::_main();
	if(!fmain)force2::_main();
}

Measured memory_bytes: 2688