#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <complex>
#include <cmath>
using namespace std;


int main(int argc, char const *argv[]) {
    int n,m,a,b;
    cin>>n>>m>>a>>b;
    vector<string> res(n);
    for(int i=0;i<n;++i){
        string s = "";
        for(int k=0;k<m;++k){
            s = s + ".";
        }
        res[i] = s;
    }
    if(n%2==0&&m%2==0){
        if((n/2)*(m/2)<(a+1)/2 + (b+1)/2){
            cout<<"NO"<<endl;
            return 0;
        }
        int t = 0;
        for(int i=0;i<n/2;++i){
            for(int k=0;k<m/2;++k){
                if(t<a/2){
                    res[2*i][2*k] = '<';
                    res[2*i+1][2*k] = '<';
                    res[2*i][2*k+1] = '>';
                    res[2*i+1][2*k+1] = '>';
                }
                else if(t<a/2+b/2){
                    res[2*i][2*k] = '^';
                    res[2*i+1][2*k] = 'v';
                    res[2*i][2*k+1] = '^';
                    res[2*i+1][2*k+1] = 'v';
                }
                else if(t == a/2 + b/2){
                    if(a%2==1){
                        res[2*i][2*k] = '<';
                        res[2*i][2*k+1] = '>';
                    }
                    else if(b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                else if(t == a/2 + b/2 + 1){
                    if(a%2==1 && b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                t++;
            }
        }
        cout<<"YES"<<endl;
        for(int i=0;i<n;++i)cout<<res[i]<<endl;
        return 0;
    }
    if(m%2==1&&n%2==1){
        int u = min(a,m/2),v = min(b,n/2);
        a -= u;
        b -= v;
        if((n/2)*(m/2)<(a+b+1)/2){
            cout<<"NO"<<endl;
            return 0;
        }
        for(int i=0;i<u;++i){
            if(i==u-1){
                res[n-1][m-2] = '<';
                res[n-1][m-1] = '>';
            }
            else{
                res[n-1][2*i] = '<';
                res[n-1][2*i+1] = '>';
            }
        }
        for(int i=0;i<v;++i){
            res[2*i][m-1] = '^';
            res[2*i+1][m-1] = 'v';
        }
        int t = 0;
        for(int i=0;i<n/2;++i){
            for(int k=0;k<m/2;++k){
                if(t<a/2){
                    res[2*i][2*k] = '<';
                    res[2*i+1][2*k] = '<';
                    res[2*i][2*k+1] = '>';
                    res[2*i+1][2*k+1] = '>';
                }
                else if(t<a/2+b/2){
                    res[2*i][2*k] = '^';
                    res[2*i+1][2*k] = 'v';
                    res[2*i][2*k+1] = '^';
                    res[2*i+1][2*k+1] = 'v';
                }
                else if(t == a/2 + b/2){
                    if(a%2==1 && b%2==1){
                        res[n-3][m-3] = '<';
                        res[n-3][m-2] = '>';
                        res[n-2][m-3] = '^';
                        res[n-1][m-3] = 'v';
                    }
                    else if(a%2==1){
                        res[2*i][2*k] = '<';
                        res[2*i][2*k+1] = '>';
                    }
                    else if(b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                t++;
            }
        }
        cout<<"YES"<<endl;
        for(int i=0;i<n;++i)cout<<res[i]<<endl;
        return 0;
    }
    if(m%2==1&&n%2==0){
        int v = min(b,n/2);
        b -= v;
        if((n/2)*(m/2)<(a+1)/2 + (b+1)/2){
            cout<<"NO"<<endl;
            return 0;
        }
        for(int i=0;i<v;++i){
            res[2*i][m-1] = '^';
            res[2*i+1][m-1] = 'v';
        }
        int t = 0;
        for(int i=0;i<n/2;++i){
            for(int k=0;k<m/2;++k){
                if(t<a/2){
                    res[2*i][2*k] = '<';
                    res[2*i+1][2*k] = '<';
                    res[2*i][2*k+1] = '>';
                    res[2*i+1][2*k+1] = '>';
                }
                else if(t<a/2+b/2){
                    res[2*i][2*k] = '^';
                    res[2*i+1][2*k] = 'v';
                    res[2*i][2*k+1] = '^';
                    res[2*i+1][2*k+1] = 'v';
                }
                else if(t == a/2 + b/2){
                    if(a%2==1){
                        res[2*i][2*k] = '<';
                        res[2*i][2*k+1] = '>';
                    }
                    else if(b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                else if(t == a/2 + b/2 + 1){
                    if(a%2==1 && b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                t++;
            }
        }
        cout<<"YES"<<endl;
        for(int i=0;i<n;++i)cout<<res[i]<<endl;
        return 0;
    }
    if(m%2==0&&n%2==1){
        int u = min(a,m/2);
        a -= u;
        if((n/2)*(m/2)<(a+1)/2 + (b+1)/2){
            cout<<"NO"<<endl;
            return 0;
        }
        for(int i=0;i<u;++i){
            res[n-1][2*i] = '<';
            res[n-1][2*i+1] = '>';
        }
        int t = 0;
        for(int i=0;i<n/2;++i){
            for(int k=0;k<m/2;++k){
                if(t<a/2){
                    res[2*i][2*k] = '<';
                    res[2*i+1][2*k] = '<';
                    res[2*i][2*k+1] = '>';
                    res[2*i+1][2*k+1] = '>';
                }
                else if(t<a/2+b/2){
                    res[2*i][2*k] = '^';
                    res[2*i+1][2*k] = 'v';
                    res[2*i][2*k+1] = '^';
                    res[2*i+1][2*k+1] = 'v';
                }
                else if(t == a/2 + b/2){
                    if(a%2==1){
                        res[2*i][2*k] = '<';
                        res[2*i][2*k+1] = '>';
                    }
                    else if(b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                else if(t == a/2 + b/2 + 1){
                    if(a%2==1 && b%2==1){
                        res[2*i][2*k] = '^';
                        res[2*i+1][2*k] = 'v';
                    }
                }
                t++;
            }
        }
        cout<<"YES"<<endl;
        for(int i=0;i<n;++i)cout<<res[i]<<endl;
        return 0;
    }
}

Measured memory_bytes: 2944