#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MX=1010, inf=2e9;

int n, m, a, b;
char B[MX][MX];

inline bool val(int x, int y){ return 1<=x && x<=n && 1<=y && y<=m && B[x][y]=='.'; }

void fill_a(){
    for(int j=1; j<=m; j++){
        for(int i=1; i<=n; i++){
            if(a==0) return;
            if(!val(i,j) || !val(i,j+1)) continue;
            if(val(i+1,j) && val(i+1,j+1) && a>=2){
                B[i][j]=B[i+1][j]='<';
                B[i][j+1]=B[i+1][j+1]='>';
                a-=2;
            }
            else{
                B[i][j]='<';
                B[i][j+1]='>';
                a--;
            }
        }
    }
}

void fill_b(){
    for(int j=1; j<=m; j++){
        for(int i=1; i<=n; i++){
            if(b==0) return;
            if(!val(i,j) || !val(i+1,j)) continue;
            if(val(i,j+1) && val(i+1,j+1) && b>=2){
                B[i][j]=B[i][j+1]='^';
                B[i+1][j]=B[i+1][j+1]='v';
                b-=2;
            }
            else{
                B[i][j]='^';
                B[i+1][j]='v';
                b--;
            }
        }
    }
}

void horz(){
    for(int j=m-1; j>=1; j-=2){
        if(a==0) return;
        B[1][j]='<';
        B[1][j+1]='>';
        a--;
    }
}

void vert(){
    for(int i=1; i<n; i+=2){
        if(b==0) return;
        B[i][1]='^';
        B[i+1][1]='v';
        b--;
    }
}

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    cin>>n>>m>>a>>b;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            B[i][j]='.';

    if(n%2==1) horz();
    if(m%2==1) vert();
    if(a>0 && n%2==1 && m%2==1 && val(n,1) && val(n,2)){
        a--;
        B[n][1]='<';
        B[n][2]='>';
        if(a%2==1 && b%2==1){
            if(b>a){
                if(b%2==1 && val(n-1,3) && val(n,3)){
                    b--;
                    B[n-1][3]='^';
                    B[n][3]='v';
                }
            }
            else{
                if(a%2==1 &&val(n-1,2)&&val(n-2,3)){
                    a--;
                    B[n-1][2]='<';
                    B[n-1][3]='>';
                }
            }
        }
        else{
            if(a%2==1 &&val(n-1,2)&&val(n-2,3)){
                a--;
                B[n-1][2]='<';
                B[n-1][3]='>';
            }
            if(b%2==1 && val(n-1,3) && val(n,3)){
                b--;
                B[n-1][3]='^';
                B[n][3]='v';
            }
        }
    }
    
    if(n%2==0 && m%2==0){
        if(a>b) fill_b(), fill_a();
        else fill_a(), fill_b();
    }
    else if(n%2==0 && m%2==1){
        fill_a(), fill_b();
    }
    else if(n%2==1 && m%2==0){
        fill_b(), fill_a();
    }
    else{
        if(a>=b) fill_b(), fill_a();
        else fill_a(), fill_b();
    }
    if(a>0 || b>0){
        cout<<"NO\n";
        // cout<<a<<' '<<b<<'\n';
        // for(int i=1; i<=n; i++, cout<<'\n')
        //     for(int j=1; j<=m; j++)
        //         cout<<B[i][j];
    }
    else{
        cout<<"YES\n";
        for(int i=1; i<=n; i++, cout<<'\n')
            for(int j=1; j<=m; j++)
                cout<<B[i][j];
    }
    return 0;
}

Measured memory_bytes: 2176