/*
*/

//#pragma GCC optimize("O3")
#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <string>
#include <complex>
#include <math.h>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <stack>
#include <algorithm>
#include <list>
#include <ctime>

#include <memory.h>
#include <assert.h>

#define y0 sdkfaslhagaklsldk

#define y1 aasdfasdfasdf
#define yn askfhwqriuperikldjk
#define j1 assdgsdgasghsf
#define tm sdfjahlfasfh
#define lr asgasgash
#define norm asdfasdgasdgsd
#define have adsgagshdshfhds
#define ends asdgahhfdsfshdshfd

#define eps 1e-8
#define M_PI 3.141592653589793
#define bsize 512

#define ldouble long double
using namespace std;

#define bs 1000000007

const int N = 400031;

int n,m,a,b;

string ans[1031][1301];

int solver(int n,int m,int a,int b){

	for (int i=0;i<=n+1;i++){
		for (int j=0;j<=m+1;j++){
			ans[i][j]="";
		}
	}

	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			ans[i][j]=".";
		}
	}

	if (n%2==1&&m%2==1&&a>=2&&b>=2&&n>2&&m>2&&a%2!=(m/2)%2&&(b%2)!=(n/2)%2){
		ans[n-2][m-2]="<";
		ans[n-2][m-1]=">";
		ans[n-1][m-2]="^";
		ans[n][m-2]="v";
		ans[n-2][m]="^";
		ans[n-1][m]="v";
		ans[n][m-1]="<";
		ans[n][m]=">";
		a-=2;
		b-=2;
	}

	if (n%2==1){
		// <> row at bot
		for (int i=1;i+1<=m;i+=2){
			if (a>0&&ans[n][i]=="."&&ans[n][i+1]=="."){
				ans[n][i]="<";
				ans[n][i+1]=">";
				--a;
			}
		}
	}
	if (m%2==1){
		// col of ^V at right
		for (int i=1;i+1<=n;i+=2){
			if (b>0&&ans[i][m]=="."&&ans[i+1][m]=="."){
				ans[i][m]="^";
				ans[i+1][m]="v";
				--b;
			}
		}
	}

	for (int i=1;i+1<=n;i+=2){
		for (int j=1;j+1<=m;j+=2){
			if (ans[i][j]!=".")
				continue;
			if (ans[i][j+1]!=".")
				continue;
			if (ans[i+1][j]!=".")
				continue;
			if (ans[i+1][j+1]!=".")
				continue;

			if (a>1){
				ans[i][j]="<";
				ans[i][j+1]=">";
				ans[i+1][j]="<";
				ans[i+1][j+1]=">";
				a-=2;
				continue;
			}
			if (b>1){
				ans[i][j]="^";
				ans[i+1][j]="v";
				ans[i][j+1]="^";
				ans[i+1][j+1]="v";
				b-=2;
				continue;
			}
			if (b>0){
				ans[i][j]="^";
				ans[i+1][j]="v";
				--b;
				continue;
			}
			if (a>0){
				ans[i][j]="<";
				ans[i][j+1]=">";
				a--;
				continue;
			}
		}
	}
	int flag=0;

	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			if (ans[i][j]=="."&&ans[i][j+1]=="."&&a>0){
				ans[i][j]="<";
				ans[i][j+1]=">";
				flag=1;
				--a;
			}
			if (ans[i][j]=="."&&ans[i+1][j]=="."&&b>0){
				ans[i][j]="^";
				ans[i+1][j]="v";
				--b;
				flag=1;
			}
		}
	}
	return (a==0&&b==0);
}


int solver2(int n,int m,int a,int b){

	for (int i=0;i<=n+1;i++){
		for (int j=0;j<=m+1;j++){
			ans[i][j]="";
		}
	}

	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			ans[i][j]=".";
		}
	}

	if (n%2==1){
		// <> row at bot
		for (int i=1;i+1<=m;i+=2){
			if (a>0&&ans[n][i]=="."&&ans[n][i+1]=="."){
				ans[n][i]="<";
				ans[n][i+1]=">";
				--a;
			}
		}
	}
	if (m%2==1){
		// col of ^V at right
		for (int i=1;i+1<=n;i+=2){
			if (b>0&&ans[i][m]=="."&&ans[i+1][m]=="."){
				ans[i][m]="^";
				ans[i+1][m]="v";
				--b;
			}
		}
	}

	for (int i=1;i+1<=n;i+=2){
		for (int j=1;j+1<=m;j+=2){
			if (ans[i][j]!=".")
				continue;
			if (ans[i][j+1]!=".")
				continue;
			if (ans[i+1][j]!=".")
				continue;
			if (ans[i+1][j+1]!=".")
				continue;

			if (a>1){
				ans[i][j]="<";
				ans[i][j+1]=">";
				ans[i+1][j]="<";
				ans[i+1][j+1]=">";
				a-=2;
				continue;
			}
			if (b>1){
				ans[i][j]="^";
				ans[i+1][j]="v";
				ans[i][j+1]="^";
				ans[i+1][j+1]="v";
				b-=2;
				continue;
			}
			if (b>0){
				ans[i][j]="^";
				ans[i+1][j]="v";
				--b;
				continue;
			}
			if (a>0){
				ans[i][j]="<";
				ans[i][j+1]=">";
				a--;
				continue;
			}
		}
	}
	int flag=0;

	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			if (ans[i][j]=="."&&ans[i][j+1]=="."&&a>0){
				ans[i][j]="<";
				ans[i][j+1]=">";
				flag=1;
				--a;
			}
			if (ans[i][j]=="."&&ans[i+1][j]=="."&&b>0){
				ans[i][j]="^";
				ans[i+1][j]="v";
				--b;
				flag=1;
			}
		}
	}
	/*if (flag){
		cout<<"!!!"<<endl;
		while (true);
	}*/
	return (a==0&&b==0);
}

int main(){
//	freopen("apache.in","r",stdin);
//	freopen("apache.out","w",stdout);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	ios_base::sync_with_stdio(0);
//	cin.tie(0);

	/*for (int n=1;n<=20;n++){
		for (int m=1;m<=20;m++){
			for (int a=1;a<=n*m/2;a++){
				for (int b=1;b<=n*m/2;b++){
					cout<<n<<" "<<m<<" "<<a<<" "<<b<<endl;
					int res=solver(n,m,a,b);
					int res2=solver2(n,m,a,b);
					cout<<"YES"<<endl;
					for (int i=1;i<=n;i++){
						for (int j=1;j<=m;j++){
							cout<<ans[i][j];
						}
						cout<<endl;
					}
					if (res!=res2){
						cout<<res<<" "<<res2<<endl;
						while (true);
					}
					cout<<res<<endl;
				}
			}
		}
	}
*/
	cin>>n>>m>>a>>b;
	if (n*m<(a+b)*2){
		cout<<"NO"<<endl;
		return 0;
	}

	bool res=solver(n,m,a,b);
	if (res==0){
		cout<<"NO"<<endl;
	}
	else
	{
		cout<<"YES"<<endl;
		for (int i=1;i<=n;i++){
			for (int j=1;j<=m;j++){
				cout<<ans[i][j];
			}
			cout<<endl;
		}
	}

//	cin.get(); cin.get();
	return 0;
}


Measured memory_bytes: 58624