#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
//#define eps 1e-8
//#define eq(x,y) (fabs((x)-(y)) < eps)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int>pii;
const ll mod = 998244353;
long double PI = acosl(-1);
const ll infl = 3e18+10;
const int inf = 1e9+10;
const int nmax = 2e5+5;
const int MAXLG = log2(nmax)+1;
//mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
//typedef tree< int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ost;

void NA(){
    cout<<"NO";
    exit(0);
}

int main(){
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

    int n,m,a,b;
    cin>>n>>m>>a>>b;
    vector<vector<char> >g(n, vector<char>(m, '.') );

    if(n%2){
        for(int j=0; j<m-1; j+=2){
            if(a>0){
                g[n-1][j] = '<';
                g[n-1][j+1] = '>';
                a--;
            }
            else break;
        }
    }
    if(m%2){
        for(int i=0; i<n-1; i+=2){
            if(b>0){
                g[i][m-1] = '^';
                g[i+1][m-1] = 'v';
                b--;
            }
            else break;
        }
    }

    for(int i=0; i<n-1; i+=2){
        for(int j=0; j<m-1; j+=2){
            if(n%2 and m%2 and i==n-3 and j==m-3) break;
            if(a>1){
                a-=2;
                g[i][j] = g[i+1][j] = '<';
                g[i][j+1] = g[i+1][j+1] = '>';
            }
            else if(b>1){
                b-=2;
                g[i][j] = g[i][j+1] = '^';
                g[i+1][j] = g[i+1][j+1] = 'v';
            }
            else if(a>0){
                a--;
                g[i][j] = '<';
                g[i][j+1] = '>';
            }
            else if(b>0){
                b--;
                g[i][j] = '^';
                g[i+1][j] = 'v';
            }
        }
    }

    if(n%2 and m%2){
        int i = n-3, j = m-3;
        if(a>0 and b>0){
            a--, b--;
            g[i][j] = g[i+2][j+1] = '<';
            g[i][j+1] = g[i+2][j+2] = '>';
            g[i+1][j] = '^', g[i+2][j] = 'v';
        }
        else if(a>0){
            a--;
            g[i][j] = '<', g[i][j+1] = '>';
            if(a>0){
                a--;
                g[i+1][j] = '<', g[i+1][j+1] = '>';
            }
        }
        else if(b>0){
            b--;
            g[i][j] = '^', g[i+1][j] = 'v';
            if(b>0){
                b--;
                g[i][j+1] = '^', g[i+1][j+1] = 'v';
            }
        }
    }

    if(a>0 or b>0) NA();
    cout<<"YES\n";
    for(auto z : g){
        for(char ch : z)
            cout<<ch;
        cout<<"\n";
    }
}
/*
*/
