#include<bits/stdc++.h>
using namespace std;
template<typename T>inline T read(){
	T f=0,x=0;char c=getchar();
	while(!isdigit(c)) f=c=='-',c=getchar();
	while(isdigit(c)) x=x*10+c-48,c=getchar();
	return f?-x:x;
}
#define int long long
namespace run{
	const int N=4e5+9;
	int head[N],nex[N],to[N],cnt;
	inline void add(int u,int v){
		nex[++cnt]=head[u];
		head[u]=cnt,to[cnt]=v;
	}

	int n,m,a[N],b[N],vis[N],tota,totb;
	inline void dfs(int u){
		vis[u]=1,tota+=a[u],totb+=b[u];
		for(int i=head[u];i;i=nex[i])
			if(!vis[to[i]]) dfs(to[i]);
	}
	int main(){
		n=read<int>(),m=read<int>();
		for(int i=1;i<=n;i++) a[i]=read<int>();
		for(int i=1;i<=n;i++) b[i]=read<int>();
		for(int i=1;i<=m;i++){
			int u=read<int>(),v=read<int>();
			add(u,v),add(v,u);
		}

		for(int i=1;i<=n;i++) if(!vis[i]){
			tota=totb=0,dfs(i);
			if(tota!=totb) puts("No"),exit(0);
		}
		puts("Yes");
		return 0;
	}
}
#undef int
int main(){
#ifdef my
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	return run::main();
}
#include<bits/stdc++.h>
#define ll  int64_t
#define pp pair<int,int>
#define ppn pair<pp,int>
#define F first
#define S second
#define N 1000005
#define mod 1000000007
#define pi 3.14159265358979323846

using namespace std;

vector<int>graph[N];
int vis[N], vis1[N];
ll a[N],b[N], n, m;

void dfs(int s, int r)
{
    vis[s]=1;
    for(int i=0; i<graph[s].size(); i++)
    {
        int d =graph[s][i];
        if(!vis[d])
        {
            dfs(d,s);
        }
    }

    if(a[s]!=b[s] && r!=-1){
        if(b[s]>a[s]){
                ll k = b[s]-a[s];
                a[s]+=k;
                a[r]-=k;
            }
            else{
                ll k = a[s]-b[s];
                a[s]-=k;
                a[r]+=k;
                //cout<<k<<endl;
            }
    }
}


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

    cin>>n>>m;
    for(int i=1; i<=n; i++)cin>>a[i];
    for(int i=1; i<=n; i++)cin>>b[i];
    int u, v;
    for(int i=0; i<m; i++)
    {
        cin>>u>>v;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }
    for(int i=1; i<=n; i++)
    {
        if(!vis[i])
        {
            dfs(i,-1);
        }
    }
    int f = true;
    for(int i=1; i<=n; i++)
    {
        //cout<<a[i]<<" "<<b[i]<<endl;
        if(a[i]!=b[i])
        {
            f = false;
            break;
        }
    }
    cout<<(f?"Yes":"No")<<endl;
}
